# react-declarative-flow

> React declarative control flow

Latest version **0.1.2** (published 2018-07-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install react-declarative-flow
pnpm add react-declarative-flow
yarn add react-declarative-flow
bun add react-declarative-flow
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2018-07-03 |
| First published | 2018-07-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 12.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 29 |
| Maintainers | yosbelms |
| Keywords | react, reactjs, jsx, view, component, declarative, control flow, conditional, loop, map |

## Links

- npm: https://www.npmjs.com/package/react-declarative-flow
- Repository: https://github.com/yosbelms/react-declarative-flow
- npm.io page: https://npm.io/package/react-declarative-flow

## Dependencies (4)

- [react](https://npm.io/package/react.md) ^16.4.1
- [prop-types](https://npm.io/package/prop-types.md) ^15.6.2
- [@types/react](https://npm.io/package/@types/react.md) ^16.4.6
- [@types/prop-types](https://npm.io/package/@types/prop-types.md) ^15.5.3

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.1.2 (latest) — 2018-07-03
- 0.1.1 — 2018-07-02
- 0.1.0 — 2018-07-02
- 0.0.3 — 2018-07-01
- 0.0.2 — 2018-07-01
- 0.0.1 — 2018-07-01

## README

# React declarative control flow

`React declarative flow` is a library that aims to make React views more declarative, idiomatic, easy to read, and easy to write.

JSX is a declarative syntax to compose virtual-dom pieces of views. But, sometimes we need to put some logic down, for example, conditionally render components, or show them as a result of looping a list of values. JSX proposes either to create a new component/function to handle that logic, or intermix JS code inside the view.

This library takes advantage of React Higher Order Componets, and Render-Props pattern to make possible to write conditionals and loops in a more declarative way while reducing visual cluttering.

Lets write a simple table of products with two columns `Name` and `In Stock`. If `In Stock` is `0` then a message `Out of Stock` should be displayed. Currently we should write something like the following:

```tsx
function ProductTable({products}) {
  return (
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>In Stock</th>
        </tr>
      </thead>
      {renderTableBody(products)}
    </table>
  )
}

function renderTableBody(products) {
  return (
    <tbody>
    {products.map((product) =>
      <tr>
        <td>{product.name}</td>
        {(product.inStock > 0)
          ? <td>{product.inStock}</td>
          : <td>Out of Stock</td>
        }
      </tr>
    )}
    </tbody>
  )
}
```

With this library will turn the above code into:

```tsx
function ProductTable({products}) {
  return (
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>In Stock</th>
        </tr>
      </thead>
      <tbody>
      <Map target={products} with={(product) =>
        <tr>
          <td>{product.name}</td>
          <If test={product.inStock > 0}
            then={<td>{product.inStock}</td>}
            else={<td>Out of Stock</td>}
          />
        </tr>
      }/>
      </tbody>
    </table>
  )
}
```

## Install

```
// with yarn
yarn add react-declarative-flow

// with npm
npm install react-declarative-flow
```

## If

Conditionally render components based on the truthy-ness of evaluating the `test` prop. Render `then` if `test` evaluates to truthy, render `else` otherwise.

```tsx
<If
  test={a > b}
  then={'a is greater then b'}
  else={'a is not greater than b'}
/>
```

## Map

Render the result of dispatching to the `map` method of `target` passing the `with` function as the first argument.

```tsx
<Map target={[1, 2, 3]} with={(item) =>
  <div key={item}>{item}</div>
} />
```

---
_Source: https://npm.io/package/react-declarative-flow · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
