我正在反应中创建一个表单生成器。在一个简单的文本字段上,我需要:
- Change
currentValue
- When
currentValue
已更改,验证它
- 验证完成后,发出一个事件(有效或无效)
这是我的代码:
const TextInput = ({ props }) => {
const [currentValue, setCurrentValue] = useState(props.initialValue);
const [validationState, setValidationState] = useState(false);
const validate = () => {
if (!currentValue) {
setValidationState(false);
}
else {
setValidationState(true);
}
}
useEffect(() => {
validate();
}, [currentValue]);
useEffect(() => {
emitter.emit('textInputChange', { currentValue, validationState});
}, [validationState]);
}
但是,我现在遇到这个问题,如果我只依赖validationState
发出变化,尽快TextInput
变为有效,发射停止。我需要在每次更改时发出。
但如果我依赖currentValue
也是,那么自从validationState
不同步,我可以获得无效状态。换句话说,currentValue
可能是有效的,但我发出invalid
从之前未更新的validationState
.
我应该如何解决这个问题?
我认为你不需要状态validationState
,像这样更新一个useEffect
:
const validate = (value) => {
if (!value) {
return false;
}
return true;
};
useEffect(() => {
const isValid = validate(currentValue);
emitter.emit("textInputChange", { currentValue, validationState: isValid });
}, [currentValue]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)