react-lodash

Lodash as React components

Usage no npm install needed!

<script type="module">
  import reactLodash from 'https://cdn.skypack.dev/react-lodash';
</script>

README

react-lodash build status npm

Use any lodash function as a React component

Example

Without

import react from 'react'

array && array.length ? (
  <ul>
    {array.map(i => (
      <li key={i}>{i}</li>
    ))}
  </ul>
) : (
  'Empty list'
)

With

The example below uses lodash _.isEmpty and _.map as components.

import react from 'react'
import { IsEmpty, Map } from "react-lodash"

<IsEmpty
  value={array}
  yes="Empty list"
  no={() => (
    <ul>
      <Map collection={array} iteratee={i => <li key={i}>{i}</li>} />
    </ul>
  )}
/>

Demo

You can also try react-lodash on CodeSandbox 😉

Install

npm install react-lodash

API

react-lodash uses lodash documentation for prop names.

For example, let's say you want to use _.get. Based on lodash documentation, it takes an object and path arguments, so <Get /> will have the same props.

const object = {
  a: {
    b: { 1 }
  }
}

const path = 'a.b'

// lodash
_.get(object, path)

// react-lodash
<Get object={object} path={path} />

Also every react-lodash component accepts a children render prop:

<Get object={object} path={path}>
  {value => <UpperCase string={value} />}
</Get>

For lodash functions that return a boolean, react-lodash components accept yes and no render props:

<IsEmpty
  value={array}
  yes={() => <p>empty</p>}
  no={() => <p>not empty</p>}
/>

Importing

You can either use named imports or individually import components

import { IsEmpty } from 'react-lodash'
import IsEmpty from 'react-lodash/lib/IsEmpty'

Components

Below you'll find the 296 available components. For detailed documentation, you can visit https://lodash.com/docs

Note: Since react-lodash is 1:1 mapping of lodash, maybe not all components will be relevant in a React application. But at least, you have many options ;)

Array

  • <Chunk array={} size={} /> → _.chunk
  • <Compact array={} /> → _.compact
  • <Concat array={} values={} /> → _.concat
  • <Difference array={} values={} /> → _.difference
  • <DifferenceBy array={} values={} iteratee={} /> → _.differenceBy
  • <DifferenceWith array={} values={} comparator={} /> → _.differenceWith
  • <Drop array={} n={} /> → _.drop
  • <DropRight array={} n={} /> → _.dropRight
  • <DropRightWhile array={} predicate={} /> → _.dropRightWhile
  • <DropWhile array={} predicate={} /> → _.dropWhile
  • <Fill array={} value={} start={} end={} /> → _.fill
  • <FindIndex array={} predicate={} fromIndex={} /> → _.findIndex
  • <FindLastIndex array={} predicate={} fromIndex={} /> → _.findLastIndex
  • <First array={} /> → _.first
  • <Flatten array={} /> → _.flatten
  • <FlattenDeep array={} /> → _.flattenDeep
  • <FlattenDepth array={} depth={} /> → _.flattenDepth
  • <FromPairs pairs={} /> → _.fromPairs
  • <IndexOf array={} value={} fromIndex={} /> → _.indexOf
  • <Initial array={} /> → _.initial
  • <Intersection arrays={} /> → _.intersection
  • <IntersectionBy arrays={} iteratee={} /> → _.intersectionBy
  • <IntersectionWith arrays={} comparator={} /> → _.intersectionWith
  • <Join array={} separator={} /> → _.join
  • <Last array={} /> → _.last
  • <LastIndexOf array={} value={} fromIndex={} /> → _.lastIndexOf
  • <Nth array={} n={} /> → _.nth
  • <Pull array={} values={} /> → _.pull
  • <PullAll array={} values={} /> → _.pullAll
  • <PullAllBy array={} values={} iteratee={} /> → _.pullAllBy
  • <PullAllWith array={} values={} comparator={} /> → _.pullAllWith
  • <PullAt array={} indexes={} /> → _.pullAt
  • <Remove array={} predicate={} /> → _.remove
  • <Reverse array={} /> → _.reverse
  • <Slice array={} start={} end={} /> → _.slice
  • <SortedIndex array={} value={} /> → _.sortedIndex
  • <SortedIndexBy array={} value={} iteratee={} /> → _.sortedIndexBy
  • <SortedIndexOf array={} value={} /> → _.sortedIndexOf
  • <SortedLastIndex array={} value={} /> → _.sortedLastIndex
  • <SortedLastIndexBy array={} value={} iteratee={} /> → _.sortedLastIndexBy
  • <SortedLastIndexOf array={} value={} /> → _.sortedLastIndexOf
  • <SortedUniq array={} /> → _.sortedUniq
  • <SortedUniqBy array={} iteratee={} /> → _.sortedUniqBy
  • <Tail array={} /> → _.tail
  • <Take array={} n={} /> → _.take
  • <TakeRight array={} n={} /> → _.takeRight
  • <TakeRightWhile array={} predicate={} /> → _.takeRightWhile
  • <TakeWhile array={} predicate={} /> → _.takeWhile
  • <Union arrays={} /> → _.union
  • <UnionBy arrays={} iteratee={} /> → _.unionBy
  • <UnionWith arrays={} comparator={} /> → _.unionWith
  • <Uniq array={} /> → _.uniq
  • <UniqBy array={} iteratee={} /> → _.uniqBy
  • <UniqWith array={} comparator={} /> → _.uniqWith
  • <Unzip array={} /> → _.unzip
  • <UnzipWith array={} iteratee={} /> → _.unzipWith
  • <Without array={} values={} /> → _.without
  • <Xor arrays={} /> → _.xor
  • <XorBy arrays={} iteratee={} /> → _.xorBy
  • <XorWith arrays={} comparator={} /> → _.xorWith
  • <Zip arrays={} /> → _.zip
  • <ZipObject props={} values={} /> → _.zipObject
  • <ZipObjectDeep props={} values={} /> → _.zipObjectDeep
  • <ZipWith arrays={} iteratee={} /> → _.zipWith

Collection

  • <CountBy collection={} iteratee={} /> → _.countBy
  • <Each collection={} iteratee={} /> → _.each
  • <EachRight collection={} iteratee={} /> → _.eachRight
  • <Every collection={} predicate={} /> → _.every
  • <Filter collection={} predicate={} /> → _.filter
  • <Find collection={} predicate={} fromIndex={} /> → _.find
  • <FindLast collection={} predicate={} fromIndex={} /> → _.findLast
  • <FlatMap collection={} iteratee={} /> → _.flatMap
  • <FlatMapDeep collection={} iteratee={} /> → _.flatMapDeep
  • <FlatMapDepth collection={} iteratee={} depth={} /> → _.flatMapDepth
  • <GroupBy collection={} iteratee={} /> → _.groupBy
  • <Includes collection={} value={} fromIndex={} /> → _.includes
  • <InvokeMap collection={} path={} args={} /> → _.invokeMap
  • <KeyBy collection={} iteratee={} /> → _.keyBy
  • <Map collection={} iteratee={} /> → _.map
  • <OrderBy collection={} iteratees={} orders={} /> → _.orderBy
  • <Partition collection={} predicate={} /> → _.partition
  • <Reduce collection={} iteratee={} accumulator={} /> → _.reduce
  • <ReduceRight collection={} iteratee={} accumulator={} /> → _.reduceRight
  • <Reject collection={} predicate={} /> → _.reject
  • <Sample collection={} /> → _.sample
  • <SampleSize collection={} n={} /> → _.sampleSize
  • <Shuffle collection={} /> → _.shuffle
  • <Size collection={} /> → _.size
  • <Some collection={} predicate={} /> → _.some
  • <SortBy collection={} iteratees={} /> → _.sortBy

Date

Function

  • <After n={} func={} /> → _.after
  • <Ary func={} n={} /> → _.ary
  • <Before n={} func={} /> → _.before
  • <Bind func={} thisArg={} partials={} /> → _.bind
  • <BindKey object={} key={} partials={} /> → _.bindKey
  • <Curry func={} arity={} /> → _.curry
  • <CurryRight func={} arity={} /> → _.curryRight
  • <Debounce func={} wait={} options={} /> → _.debounce
  • <Defer func={} args={} /> → _.defer
  • <Delay func={} wait={} args={} /> → _.delay
  • <Flip func={} /> → _.flip
  • <Memoize func={} resolver={} /> → _.memoize
  • <Negate predicate={} /> → _.negate
  • <Once func={} /> → _.once
  • <OverArgs func={} transforms={} /> → _.overArgs
  • <Partial func={} partials={} /> → _.partial
  • <PartialRight func={} partials={} /> → _.partialRight
  • <Rearg func={} indexes={} /> → _.rearg
  • <Rest func={} start={} /> → _.rest
  • <Spread func={} start={} /> → _.spread
  • <Throttle func={} wait={} options={} /> → _.throttle
  • <Unary func={} /> → _.unary
  • <Wrap value={} wrapper={} /> → _.wrap

Lang

Math

  • <Add augend={} addend={} /> → _.add
  • <Ceil number={} precision={} /> → _.ceil
  • <Divide dividend={} divisor={} /> → _.divide
  • <Floor number={} precision={} /> → _.floor
  • <Max array={} /> → _.max
  • <MaxBy array={} iteratee={} /> → _.maxBy
  • <Mean array={} /> → _.mean
  • <MeanBy array={} iteratee={} /> → _.meanBy
  • <Min array={} /> → _.min
  • <MinBy array={} iteratee={} /> → _.minBy
  • <Multiply multiplier={} multiplicand={} /> → _.multiply
  • <Round number={} precision={} /> → _.round
  • <Subtract minuend={} subtrahend={} /> → _.subtract
  • <Sum array={} /> → _.sum
  • <SumBy array={} iteratee={} /> → _.sumBy

Number

  • <Clamp number={} lower={} upper={} /> → _.clamp
  • <InRange number={} start={} end={} /> → _.inRange
  • <Random lower={} upper={} floating={} /> → _.random

Object

  • <Assign object={} sources={} /> → _.assign
  • <AssignWith object={} sources={} customizer={} /> → _.assignWith
  • <At object={} paths={} /> → _.at
  • <Create prototype={} properties={} /> → _.create
  • <Defaults object={} sources={} /> → _.defaults
  • <DefaultsDeep object={} sources={} /> → _.defaultsDeep
  • <Entries object={} /> → _.entries
  • <EntriesIn object={} /> → _.entriesIn
  • <Extend object={} sources={} /> → _.extend
  • <ExtendWith object={} sources={} customizer={} /> → _.extendWith
  • <FindKey object={} predicate={} /> → _.findKey
  • <FindLastKey object={} predicate={} /> → _.findLastKey
  • <ForIn object={} iteratee={} /> → _.forIn
  • <ForInRight object={} iteratee={} /> → _.forInRight
  • <ForOwn object={} iteratee={} /> → _.forOwn
  • <ForOwnRight object={} iteratee={} /> → _.forOwnRight
  • <Functions object={} /> → _.functions
  • <FunctionsIn object={} /> → _.functionsIn
  • <Get object={} path={} defaultValue={} /> → _.get
  • <Has object={} path={} /> → _.has
  • <HasIn object={} path={} /> → _.hasIn
  • <Invert object={} /> → _.invert
  • <InvertBy object={} iteratee={} /> → _.invertBy
  • <Invoke object={} path={} args={} /> → _.invoke
  • <Keys object={} /> → _.keys
  • <KeysIn object={} /> → _.keysIn
  • <MapKeys object={} iteratee={} /> → _.mapKeys
  • <MapValues object={} iteratee={} /> → _.mapValues
  • <Merge object={} sources={} /> → _.merge
  • <MergeWith object={} sources={} customizer={} /> → _.mergeWith
  • <Omit object={} paths={} /> → _.omit
  • <OmitBy object={} predicate={} /> → _.omitBy
  • <Pick object={} paths={} /> → _.pick
  • <PickBy object={} predicate={} /> → _.pickBy
  • <Result object={} path={} defaultValue={} /> → _.result
  • <Set object={} path={} value={} /> → _.set
  • <SetWith object={} path={} value={} customizer={} /> → _.setWith
  • <Transform object={} iteratee={} accumulator={} /> → _.transform
  • <Unset object={} path={} /> → _.unset
  • <Update object={} path={} updater={} /> → _.update
  • <UpdateWith object={} path={} updater={} customizer={} /> → _.updateWith
  • <Values object={} /> → _.values
  • <ValuesIn object={} /> → _.valuesIn

Seq

  • <Chain value={} /> → _.chain
  • <Tap value={} interceptor={} /> → _.tap
  • <Thru value={} interceptor={} /> → _.thru

String

  • <CamelCase string={} /> → _.camelCase
  • <Capitalize string={} /> → _.capitalize
  • <Deburr string={} /> → _.deburr
  • <EndsWith string={} target={} position={} /> → _.endsWith
  • <Escape string={} /> → _.escape
  • <EscapeRegExp string={} /> → _.escapeRegExp
  • <KebabCase string={} /> → _.kebabCase
  • <LowerCase string={} /> → _.lowerCase
  • <LowerFirst string={} /> → _.lowerFirst
  • <Pad string={} length={} chars={} /> → _.pad
  • <PadEnd string={} length={} chars={} /> → _.padEnd
  • <PadStart string={} length={} chars={} /> → _.padStart
  • <ParseInt string={} radix={} /> → _.parseInt
  • <Repeat string={} n={} /> → _.repeat
  • <Replace string={} pattern={} replacement={} /> → _.replace
  • <SnakeCase string={} /> → _.snakeCase
  • <Split string={} separator={} limit={} /> → _.split
  • <StartCase string={} /> → _.startCase
  • <StartsWith string={} target={} position={} /> → _.startsWith
  • <Template string={} options={} /> → _.template
  • <ToLower string={} /> → _.toLower
  • <ToUpper string={} /> → _.toUpper
  • <Trim string={} chars={} /> → _.trim
  • <TrimEnd string={} chars={} /> → _.trimEnd
  • <TrimStart string={} chars={} /> → _.trimStart
  • <Truncate string={} options={} /> → _.truncate
  • <Unescape string={} /> → _.unescape
  • <UpperCase string={} /> → _.upperCase
  • <UpperFirst string={} /> → _.upperFirst
  • <Words string={} pattern={} /> → _.words

Util

License

MIT

Patreon - Supporters ✨