gpt4 book ai didi

javascript - 无法使用 R.path 获取输入值

转载 作者:行者123 更新时间:2023-12-01 02:33:02 25 4
gpt4 key购买 nike

我正在使用流行的reValidation library验证我的所有输入。我注意到他们使用 Ramda 来简化所有函数调用。我尝试基于 the example 扩展他们的助手功能。这是我试图实现的目标

import Revalidation from 'revalidation';
import compose from 'ramda/src/compose';
import lte from 'ramda/src/lte';
import path from 'ramda/src/path';

const isValueLTE = len =>
compose(lte(len), path(['target', 'value']));

const validationRules = {
quantity: [
[ isValueLTE(5),
`Minimum Name length of 5 is required.`
],
],
};

const Form = ({ revalidation : {form, updateValueAndValidate, updateState, valid, errors = {}, onSubmit} }) =>
(
<div className='form'>
<div className='formGroup'>
<label>Quantity</label>
<input
type='number'
name="quantity"
value={form.quantity}
onChange={updateValueAndValidate}
/>
</div>
<button onClick={() => onSubmit(onSubmitCb)}>Submit</button>
</div>
)

const EnhancedForm = revalidation(Form);
<EnhancedForm
initialState={initialState}
rules={validationRules}
validateSingle={true}
validateOnChange={true}
/>

问题是当我使用 compose 包装 ltepath 时,我无法获取值输入。正确的使用方法是什么?

最佳答案

柯里化(Currying)与 ramda 一起使用的方式是,您始终在早期的部分应用程序中指定前面的参数:

lte(1, 2); // returns: true, because 1 is less than or equal to 2
lte(1); // returns something equivalent to: (number) => lte(1, number);

因此,如果您调用 lte(len),您会返回一个函数,当在向其提供数字 n 的同时调用该函数时,它会告诉您是否 len 小于或等于 n,相当于以下“普通”示例:

(n) => len <= n

在您的情况下,您需要一个函数来告诉您 n 是否小于或等于 len,相当于以下“简单”示例:

(n) => n <= len

换句话说,您希望部分应用 R.lte 以及提前给出的 第二个 参数。不可能用一个参数调用一个函数,但将其标记为第二个参数。

管理这种情况的一种方法是为第一个参数使用一些特殊值,该函数将其解释为占位符,就像 the answer of Scott Sauyet 一样。已经建议使用 R.__ 占位符。

另一种方法是更改​​函数的参数顺序,使您想要提前填写的参数排在前面。对于二元函数(有2个参数的函数),更改顺序的唯一可能方法是翻转参数。 lambda has a function为此:

const givenInAdvance = 42;
const isLTE42 = R.flip(R.lte)(givenInAdvance);

这是显式部分应用二元函数的快捷方式,其中第二个参数提前给出:

const givenInAdvance = 42;
const isLTE42 = R.lte(R.__, givenInAdvance);

这又相当于手动柯里化(Currying)R.lte:

const isLTE42 = (n) => R.lte(n, givenInAdvance)

// equivalent to
const isLTE42 = (n) => n <= givenInAdvance

关于javascript - 无法使用 R.path 获取输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com