【发布时间】:2020-07-23 10:12:45
【问题描述】:
用钩子反应组件:
要求:页面加载时,数据会从后端填充到下拉列表和多选表格(带有复选框的表格)中。单击提交按钮时,我需要使用此合并对象(对于选择的默认值)进行另一个 REST 调用。
注意:没有为这些 ui 组件调用任何更改处理程序。
问题:
- 根本没有设置状态,如果我尝试它会进入无限循环。因为它会一次又一次地呈现页面。
- 如果我尝试设置状态并使用它,作为异步调用,当时状态不可用。
需要建议:有没有办法在表单加载事件中设置默认选定值的状态。
const [data, setData] = useState(undefined);
const changeRequests = useSelector(state =>
state.oncallRequest.changeRequests
);
useEffect(() => {
if (!changeRequests.fulfilled) {
dispatch(fetchRequests(), [dispatch])
.then(response => setData(setDefaultState(response.data)));
}
}, [changeRequests.fulfilled, dispatch]);
我收到以下错误:
ERROR: TypeError: Cannot read property 'then' of undefined.async call.
动作类:
export const fetchRequests = () => dispatch => {
dispatch({type: LIST_PENDING});
listChangeRequests().then(data => {
dispatch({type: LIST_FULFILLED, changeRequests: data})
}).catch(err => {
dispatch({type: LIST_FAILED, changeRequests: {error: err.message}})
});
};
**Service Class**
export const listChangeRequests = () => axiosInstance.get(`/getData`).then(res => {
return res.data;
});
SOLUTION:
I used 2 use Effect: one for fetching data from backend and another for setting state.
**but getting the following exception**
1) **React Hook useEffect has a missing dependency: 'setDefaultState'. Either include it or remove the dependency array**
2) 'data' is assigned a value but never used
Please advise on the warnings...
useEffect(() => {
if (!changeRequests.fulfilled) {
dispatch(fetchRequests(), [dispatch])
}
}, [changeRequests.fulfilled, dispatch]);
-------------
useEffect(() => {
if (changeRequests.data) {
setData(setDefaultState(changeRequests.data));
}
}, [changeRequests.data]);
【问题讨论】:
-
请参阅How to Ask 页面。这里没有足够的信息来提供帮助。
-
OFC。请提供Minimal, Complete, and Reproducible 的尝试示例。
-
实际上更多的是一个问题:如果我在其中一个处理程序中设置组件的状态,它可以工作,但在这里我根本无法触及任何处理程序(所有处理程序都被禁用),我该如何设置状态。
-
@DaveNewton@DrewReese 更新了代码
标签: javascript reactjs