![](/img/trans.png)
[英]React useEffect doesn't reload my component after state update
[英]useEffect doesn't reload child component when its state changes
我有一個這樣的反應組件結構:
在我的表格組件中,我可以選擇觸發一個模式,提示用戶提供一些輸入,然后向后端發送一個 put 請求。 在代碼中,它看起來像這樣:
const ParentContainer = (): JSX.Element => {
const dataToPassDown = useSelector((state:IRootState) => selectData(state));
return (
<ParentComponent data={dataToPassDown}/>
)
}
const ParentComponent = (props): JSX.Element => {
const {data} = props;
return (
<MyHeader data = {data}/>
<MyTable data = {data.tableData} />
)
}
const MyTable = (props): JSX.Element => {
const {data} = props;
const [inputFromModal, setInputFromModal] = useState("");
const dispatch = useDispatch();
useEffect(() => {
dispatch(putRequest(inputFromModal);
}, [inputFromModal]);
return (
<Modal visible={false} updateInputValue={setInputFromModal}/>
<Table ... />
)
}
一旦模態關閉,我想(僅)刷新表格組件,但在當前設置中,當其 state ( inputFromModal
)更改時, useEffect
不會重新加載表格組件。 當 state 改變時,我認為useEffect
會重新加載組件是錯誤的嗎?
重新渲染組件不是useEffect
的一部分。 組件將在其 state 更改或父組件重新渲染時重新渲染。
通過使用useEffect
,你告訴 React 你的組件需要在渲染后做一些事情。 (或者在這種情況下,在每次更改inputFromModal
之后。這意味着每次更改inputFromModal
時您都在發出 put 請求。
總而言之,為了重新渲染您的組件,您需要由父組件更新數據道具。
您在這里錯過了一點,僅當父組件重新渲染或您的 MyTable 組件的 state 更改時,您的表格才會重新渲染,現在您從道具中獲取的數據,將其設置在您的 state 中,以便每當該數據更改您的組件將重新渲染
const MyTable = (props): JSX.Element => {
const {data} = props;
const [inputFromModal, setInputFromModal] = useState("");
const [tableData, setTableData] = useState();
const dispatch = useDispatch();
useEffect(() => {
setTableData(data)
}, [data]);
useEffect(() => {
dispatch(putRequest(inputFromModal);
}, [inputFromModal]);
return (
<Modal visible={false} updateInputValue={setInputFromModal}/>
<Table ... />
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.