问题描述
我有一个简单的<form>
,其中既包含受控输入也包含不受控制的输入。
import React,{ useState,useEffect,useRef } from "react";
const ControlledInput = () => {
const [value,setValue] = useState("controlled");
useEffect(() => {
console.log("Controlled: useEffect() cause value has changed to " + value);
},[value]);
console.log("Controlled: re-render with " + value);
return (
<div>
<label>Controlled input</label>
<input
name={"controlled"}
value={value}
onChange={(ev) => setValue(ev.target.value)}
/>
</div>
);
};
const UncontrolledInput = () => {
const [value,_setValue] = useState("uncontrolled");
useEffect(() => {
console.log(
"Uncontrolled: useEffect() cause value has changed to " + value
);
},[value]);
console.log("Uncontrolled: re-render with " + value);
return (
<div>
<label>Uncontrolled input</label>
<input name={"uncontrolled"} defaultValue={value} />
</div>
);
};
const App = () => {
return (
<form>
<ControlledInput />
<UncontrolledInput />
</form>
);
};
export default App;
我期望什么
在受控和非受控输入上每次更改输入值后,查看console.log
消息
我会得到什么
它只发生在受控输入上,而不发生在不受控制的输入上。
问题
我知道React会自己处理不受控制的输入。并且,以某种方式,它避免了由于内部value
处理输入而导致的输入重新呈现。但是...为什么此useEffect
无法在进一步的value
更改中运行?仅仅因为没有明确的setValue
呼叫?
我对我以前的不完整假设的真实而合理的解释很感兴趣,但是,最重要的是:
我如何使useEffect
更改后的value
可以实际运行?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)