call function from useEffect and other function(从useEffect和其他函数调用函数)
本文介绍了从useEffect和其他函数调用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个子组件,它向父组件发出一个带有事件的操作:
子组件:
export default function ChildComponent(props) {
const classes = useStyles();
const [value, setValue] = React.useState([0, 5]);
const handleChange = (_, newValue) => {
setValue(newValue);
props.updateData(newValue)
};
return (
<div className={classes.root}>
<GrandSonComponent
value={value}
onChange={handleChange}
/>
</div>
);
}
父组件:
export const ParentComponent = () => {
const [loading, setLoading] = React.useState(true);
const { appData, appDispatch } = React.useContext(Context);
function fetchElements(val) {
fetchData(val);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => { return fetchData() }, []);
async function fetchData(params) {
const res = await axios.get('/url', { params });
appDispatch({ type: "LOAD_ELEMENTS", elements: res.data });
}
return (
<div>
<ChildComponent updateData={fetchElements} />
<div>
.
.
.
)
};
我想知道如何删除此行// eslint-disable-next-line react-hooks/exhaustive-deps
我需要添加此行,否则我会看到eslint错误:
React Hook useEffect has a missing dependency: 'fetchData'. Either include it or remove the
dependency array.eslintreact-hooks/exhaustive-deps
我需要在第一次呈现页面时使用fetchData(params)函数,并且当用户更改/单击子组件的值时没有任何闪亮的警告!
谢谢!
推荐答案
首先,您不需要在useEffect钩子中返回调用fetchData()函数的结果。
useEffect的依赖项可能会导致由于闭包而导致的错误。Reaction建议您不要省略useEffect挂钩、useCallback挂钩等的任何依赖项。
这有时会导致状态更新和重新呈现的无限循环,但这可以通过使用useCallback挂钩或在组件的每次重新呈现后阻止useEffect挂钩执行的其他方式来防止。
在您的情况下,您可以通过执行下面提到的步骤来解决问题:
将
fetchData函数包装在useCallback钩子中const fetchData = useCallback(async (params) => { const res = await axios.get('/url', { params }); appDispatch({ type: "LOAD_ELEMENTS", elements: res.data }); }, []);在
useEffect钩子的依赖项数组中添加fetchDatauseEffect(() => { fetchData(); }, [fetchData]);
这篇关于从useEffect和其他函数调用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:从useEffect和其他函数调用函数
猜你喜欢
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 400或500级别的HTTP响应 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
