react-lodash
v0.1.2
Published
Lodash as React components
Downloads
8,693
Readme
react-lodash
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
<Now />
→ _.now
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
<CastArray value={} />
→ _.castArray<Clone value={} />
→ _.clone<CloneDeep value={} />
→ _.cloneDeep<CloneDeepWith value={} customizer={} />
→ _.cloneDeepWith<CloneWith value={} customizer={} />
→ _.cloneWith<ConformsTo object={} source={} />
→ _.conformsTo<Eq value={} other={} />
→ _.eq<Gt value={} other={} />
→ _.gt<Gte value={} other={} />
→ _.gte<IsArguments value={} />
→ _.isArguments<IsArray value={} />
→ _.isArray<IsArrayBuffer value={} />
→ _.isArrayBuffer<IsArrayLike value={} />
→ _.isArrayLike<IsArrayLikeObject value={} />
→ _.isArrayLikeObject<IsBoolean value={} />
→ _.isBoolean<IsBuffer value={} />
→ _.isBuffer<IsDate value={} />
→ _.isDate<IsElement value={} />
→ _.isElement<IsEmpty value={} />
→ _.isEmpty<IsEqual value={} other={} />
→ _.isEqual<IsEqualWith value={} other={} customizer={} />
→ _.isEqualWith<IsError value={} />
→ _.isError<IsFinite value={} />
→ _.isFinite<IsFunction value={} />
→ _.isFunction<IsInteger value={} />
→ _.isInteger<IsLength value={} />
→ _.isLength<IsMap value={} />
→ _.isMap<IsMatch object={} source={} />
→ _.isMatch<IsMatchWith object={} source={} customizer={} />
→ _.isMatchWith<IsNaN value={} />
→ _.isNaN<IsNative value={} />
→ _.isNative<IsNil value={} />
→ _.isNil<IsNull value={} />
→ _.isNull<IsNumber value={} />
→ _.isNumber<IsObject value={} />
→ _.isObject<IsObjectLike value={} />
→ _.isObjectLike<IsPlainObject value={} />
→ _.isPlainObject<IsRegExp value={} />
→ _.isRegExp<IsSafeInteger value={} />
→ _.isSafeInteger<IsSet value={} />
→ _.isSet<IsString value={} />
→ _.isString<IsSymbol value={} />
→ _.isSymbol<IsTypedArray value={} />
→ _.isTypedArray<IsUndefined value={} />
→ _.isUndefined<IsWeakMap value={} />
→ _.isWeakMap<IsWeakSet value={} />
→ _.isWeakSet<Lt value={} other={} />
→ _.lt<Lte value={} other={} />
→ _.lte<ToArray value={} />
→ _.toArray<ToFinite value={} />
→ _.toFinite<ToInteger value={} />
→ _.toInteger<ToLength value={} />
→ _.toLength<ToNumber value={} />
→ _.toNumber<ToPlainObject value={} />
→ _.toPlainObject<ToSafeInteger value={} />
→ _.toSafeInteger<ToString value={} />
→ _.toString
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
<Attempt func={} args={} />
→ _.attempt<BindAll object={} methodNames={} />
→ _.bindAll<Cond pairs={} />
→ _.cond<Conforms source={} />
→ _.conforms<Constant value={} />
→ _.constant<DefaultTo value={} defaultValue={} />
→ _.defaultTo<Flow funcs={} />
→ _.flow<FlowRight funcs={} />
→ _.flowRight<Identity value={} />
→ _.identity<Iteratee func={} />
→ _.iteratee<Matches source={} />
→ _.matches<MatchesProperty path={} srcValue={} />
→ _.matchesProperty<Method path={} args={} />
→ _.method<MethodOf object={} args={} />
→ _.methodOf<Mixin object={} source={} options={} />
→ _.mixin<Noop />
→ _.noop<NthArg n={} />
→ _.nthArg<Over iteratees={} />
→ _.over<OverEvery predicates={} />
→ _.overEvery<OverSome predicates={} />
→ _.overSome<Property path={} />
→ _.property<PropertyOf object={} />
→ _.propertyOf<Range start={} end={} step={} />
→ _.range<RangeRight start={} end={} step={} />
→ _.rangeRight<StubArray />
→ _.stubArray<StubFalse />
→ _.stubFalse<StubObject />
→ _.stubObject<StubString />
→ _.stubString<StubTrue />
→ _.stubTrue<Times n={} iteratee={} />
→ _.times<ToPath value={} />
→ _.toPath<UniqueId prefix={} />
→ _.uniqueId
License
MIT
Patreon - Supporters ✨