Obl*_*n A 8 reactjs react-hooks
我认为我的 useEffect 坏了。
\n\n我在父组件上
\n\n <div className={redactKategori}>\n <select className="form-control form-control-sm mb-3 mr-2" name="betalt" defaultValue={\'v\xc3\xa4lj kategori\'} onChange={e => { e.preventDefault(); setKate(e.target.value); setRedactKategoris(\'d-block\') }}>\n <option >valj kategori</option>\n { Kategori ?\n Object.keys(Kategori).map(key => {\n return (\n <option key={key} value={key}>{key}</option>\n )\n }) :\n null\n }\n </select>\n <div className={redactKategoris}>\n <EditKat aa={kate} />\n</div>\nRun Code Online (Sandbox Code Playgroud)\n\n并在子组件上
\n\nfunction EditKat({ aa }) {\n let defaultValues = 0\n\n useEffect(() => {\n defaultValues = 2\n }, [aa])\n\n console.log(defaultValues)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n因此,据我了解,每次${kate}在父组件上获取值时,子组件都会触发挂钩useEffect。但是它不起作用。难道我做错了什么?
经验丰富的行为的原因并不是不起作用useEffect。这是因为函数组件的工作方式。
如果您查看子组件,如果useEffect执行并且组件重新渲染,defaultValues则将设置为0再次,因为函数内部的代码在每个渲染周期上执行。
要解决这个问题,您需要使用 来useState保持本地状态在渲染之间保持一致。
这看起来像这样:
function EditKat({ aa }) {
// Data stored in useState is kept across render cycles
let [defaultValues, setDefaultValues] = useState(0)
useEffect(() => {
setDefaultValues(2) // setDefaultValues will trigger a re-render
}, [aa])
console.log(defaultValues)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43935 次 |
| 最近记录: |