reactjs - useEffect 未触发
问题描述
我认为我的 useEffect 坏了。
我在父组件上有
<div className={redactKategori}>
<select className="form-control form-control-sm mb-3 mr-2" name="betalt" defaultValue={'välj kategori'} onChange={e => { e.preventDefault(); setKate(e.target.value); setRedactKategoris('d-block') }}>
<option >valj kategori</option>
{ Kategori ?
Object.keys(Kategori).map(key => {
return (
<option key={key} value={key}>{key}</option>
)
}) :
null
}
</select>
<div className={redactKategoris}>
<EditKat aa={kate} />
</div>
在子组件上
function EditKat({ aa }) {
let defaultValues = 0
useEffect(() => {
defaultValues = 2
}, [aa])
console.log(defaultValues)
}
所以,据我了解,每次${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)
}
推荐阅读
- c - 打印行号随着 C 中的每个输入而递增
- python-3.x - 为什么 Python 不加载 ca 证书?
- c++ - 在与 C++ 实现相关的类图中,描述员工职业的适当方式是什么?
- ajax - 带有 rowGroup 的数据表 ajax.reload()
- python - 一次热编码期间的 RunTimeError
- python-3.x - 终端中打印的 pyton3 中可能的参数
- python - 如何通过 discord.py 对所有不和谐的版主进行 dm,而不仅仅是一个?
- html - 图案元素内的多个分层元素
- android - 如何在 C++ 中解析二进制 XML 文件(如 AndroidManifest.xml)?
- django - Errno 13 权限被拒绝:Django 中的媒体文件