一连串的变化都停留在react useEffect 上

IT技术 reactjs
2021-05-19 00:42:34

我正在创建一个表单构建器作为react。在一个简单的文本字段上,我需要:

  1. 改变 currentValue
  2. currentValue更改时,验证它
  3. 验证完成后,发出一个事件(有效或无效)

这是我的代码:

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.

我应该如何解决这个问题?

1个回答

我认为你不需要 state validationState,只需像这样更新一个useEffect

const validate = (value) => {
  if (!value) {
    return false;
  }
  return true;
};

useEffect(() => {
  const isValid = validate(currentValue);
  emitter.emit("textInputChange", { currentValue, validationState: isValid });
  
}, [currentValue]);