5.1.0 • Published 5 years ago

react-helpful v5.1.0

Weekly downloads
22
License
MIT
Repository
github
Last release
5 years ago

React Helpful

NPM version Downloads Build Status

Reference

asyncComponent

Dynamic import component support

const AuthPage = asyncComponent(() => import('./pages/auth'));
const DashboardPage = asyncComponent(() => import('./pages/dashboard'));

class App extends Component {
  render() {
    return (
      <Switch>
        <Route path="/auth" component={AuthPage} />
        <Route path="/" component={DashboardPage} />
      </Switch>
    );
  }
}

renderIf

Renders component if condition is truthy

@renderIf(({ items }) => items && items.length)
class Menu extends Component {
  render() {
    const { items } = this.props;
    return items.map(item => <Item item={item} />)
  }
}

withAwait

Awaits async operation completion

@withAwait(({ asyncAction }) => asyncAction)
class Menu extends Component {
  render() {
    const { data: { loading, result, error } } = this.props;
    if (loading) {
      return <Loading />;
    }
    if (error) {
      return <Error error={error} />;
    }
    return (
      <div>{result}</div>
    );
  }
}

withImport

Dynamic import support

@withImport(() => import('./Menu'))
class MenuLoader extends Component {
  render() {
    const { DynamicComponent, items } = this.props;
    if (DynamicComponent) {
      return <DynamicComponent items={items} />;
    }
    return <Loading />;
  }
}

withMQ

Matches Media Query conditions

@withMQ({
  isPortrait: '(orientation: portrait)',
  isHidden: {
    mediaQuery: '(max-width: 1024px)',
    matches: true,
  },
})
class SideMenu extends Component {
  render() {
    const { isPortrait, isHidden } = this.props;
    return <Menu horizontal={!isPortrait} hidden={isHidden} />;
  }
}

If

Conditional renderer If component

<If is={condition}>
  {() => <Component />}
</If>

IfElse

Conditional renderer IfElse component

<IfElse
 is={condition}
 then={() => <ComponentA />}
 else={() => <ComponentA />}
/>

For

Loop renderer For component

<For
  items={[1,2,3,4,5]}
  each={(value, key) => <div key={key}>{value}</value>}
/>

Switch

Conditional renderer Switch component

<Switch
  value={value}
  cases={{
    value1: () => <ComponentA />,
    value2: () => <ComponentB />,
    value3: () => <Component3 />,
  }}
  default={() => <ComponentD />}
/>

EventListener

Expects EventTarget as target callback result for listening event

<EventListener
  target={() => document}
  event="click"
  selector="#target"
  excludeParents={['.close', '.exit']}
  on={ event => {} }
  prevent={true}
  capture={true}
  once={true}
  passive={false}
/>

AsyncComposer

Execute async actions at the same time and await their completion

const id = 'operation_id';
const actions = [friendsLoadAsync, messagesLoadAsync];

<AsyncComposer id={id} actions={actions}>
{({ id, loading, result, error }) => {
  if (loading) {
    return <Loader />;
  }
  if (error) {
    return <Error error={error} />;
  }
  return <Component result={result} />;
}}
</AsyncComposer>

AsyncSequencer

Execute async actions one by one and await their completion

const id = 'operation_id';
const actions = [configLoadAsunc, configDependedDataLoadAsync];

<AsyncSequencer id={id} actions={actions}>
{({ id, loading, result, error }) => {
  if (loading) {
    return <Loader />;
  }
  if (error) {
    return <Error error={error} />;
  }
  return <Component result={result} />;
}}
</AsyncSequencer>

License

The MIT License Copyright (c) 2016-2018 Ivan Zakharchenko

5.1.0

5 years ago

5.0.4

6 years ago

5.0.3

6 years ago

5.0.2

6 years ago

5.0.1

6 years ago

5.0.0

6 years ago

4.1.1

6 years ago

4.1.0

7 years ago

4.0.0

7 years ago

3.0.4

7 years ago

3.0.3

7 years ago

3.0.2

7 years ago

3.0.1

7 years ago

3.0.0

7 years ago

2.1.10

7 years ago

2.1.9

7 years ago

2.1.8

7 years ago

2.1.7

7 years ago

2.1.5

7 years ago

2.1.3

7 years ago

2.1.2

7 years ago

2.0.0

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.1

7 years ago