在 redux-form 中,如何将输入的值限制在一个范围内?
in redux-form, how to restrict the values of the input to a range?
我希望用户能够输入最大为 2000 的数字,超过 2000 的任何数字都将作为“2000”简单地反馈到输入中。
<input type="number" className="no-spin"
min="0" max="2000"
value={???}
{...eval(`${meal}_salt_amt_1`)} />
顺便说一句,'max' 属性只会阻止用户使用向上箭头递增到 2000 以上。
并且 redux-form 的 'validate' 功能不限制可以输入的内容。
以下是我如何将值(在州内)限制为 2000...
export function updateStats(values) {
for (var value in values){
if (value.search('salt_amt') >= 0) {
if ( values[value] > 2000) values[value] = 2000;
}
}
return {
type: UPDATE_STATS,
stats: JSON.parse(JSON.stringify(values))
};
}
...到目前为止一切顺利,因为在我的 DevTools redux 插件中,我可以看到这些值在 2000 时达到顶峰的状态。
但是我如何强制将该状态返回到我的 redux 表单输入字段中?
将状态映射到道具并使用道具无效。这样做可以让我输入超过 2000 的任何数字...
function mapStateToProps(state) {
return {
...
breakfast_salt_amt_1: state.stats.breakfast_salt_amt_1,
...
}
}
<input type="number" className="no-spin"
min="0" max="2000"
value={breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
并且仅使用状态也不起作用...
<input type="number" className="no-spin"
min="0" max="2000"
value={state.stats.breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
// => Uncaught TypeError: Cannot read property 'stats' of null
我忘记了什么?
我认为这可以帮助你:
<input type="number" className="no-spin"
min="0" max="2000"
value={this.props.breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
这就是 Normalizing 的用途。像这样(未经测试):
const under2k = value => {
if(value < 0) {
return 0
} else if(value > 2000) {
return 2000
} else {
return value
}
}
<Field
name="breakfastSaltAmt"
component="input"
type="number"
normalize={under2k}/>
export const maxLenght = max => value => {
let v;
let result = value.length > max;
if(result === false) {
v = value;
}
return v;
};
<Field
name="name"
type="text"
component={renderField}
label="Nome Completo *"
placeholder="Nome Completo"
normalize={maxLenght(10)}
/>
我希望用户能够输入最大为 2000 的数字,超过 2000 的任何数字都将作为“2000”简单地反馈到输入中。
<input type="number" className="no-spin"
min="0" max="2000"
value={???}
{...eval(`${meal}_salt_amt_1`)} />
顺便说一句,'max' 属性只会阻止用户使用向上箭头递增到 2000 以上。
并且 redux-form 的 'validate' 功能不限制可以输入的内容。
以下是我如何将值(在州内)限制为 2000...
export function updateStats(values) {
for (var value in values){
if (value.search('salt_amt') >= 0) {
if ( values[value] > 2000) values[value] = 2000;
}
}
return {
type: UPDATE_STATS,
stats: JSON.parse(JSON.stringify(values))
};
}
...到目前为止一切顺利,因为在我的 DevTools redux 插件中,我可以看到这些值在 2000 时达到顶峰的状态。
但是我如何强制将该状态返回到我的 redux 表单输入字段中?
将状态映射到道具并使用道具无效。这样做可以让我输入超过 2000 的任何数字...
function mapStateToProps(state) {
return {
...
breakfast_salt_amt_1: state.stats.breakfast_salt_amt_1,
...
}
}
<input type="number" className="no-spin"
min="0" max="2000"
value={breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
并且仅使用状态也不起作用...
<input type="number" className="no-spin"
min="0" max="2000"
value={state.stats.breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
// => Uncaught TypeError: Cannot read property 'stats' of null
我忘记了什么?
我认为这可以帮助你:
<input type="number" className="no-spin"
min="0" max="2000"
value={this.props.breakfast_salt_amt_1}
{...breakfast_salt_amt_1} />
这就是 Normalizing 的用途。像这样(未经测试):
const under2k = value => {
if(value < 0) {
return 0
} else if(value > 2000) {
return 2000
} else {
return value
}
}
<Field
name="breakfastSaltAmt"
component="input"
type="number"
normalize={under2k}/>
export const maxLenght = max => value => {
let v;
let result = value.length > max;
if(result === false) {
v = value;
}
return v;
};
<Field
name="name"
type="text"
component={renderField}
label="Nome Completo *"
placeholder="Nome Completo"
normalize={maxLenght(10)}
/>