【发布时间】:2021-10-30 03:52:18
【问题描述】:
我的问题是是否可以使用组件外部的变量来触发 useEffect。
在我的情况下,我有这个主要组件,它的 useEffect 负责在每次变量“刷新”更改时更新信息。
function Main() {
const [data, setData] = useState([])
const [refresh, setRefresh] = useState(false)
useEffect(async () => {
await axios.get(`${process.env.REACT_APP_SERVER_URL}/api/data/`)
.then(res => {
setData(res.data);
})
}, [refresh]);
然后我有一个函数,我可以在触发 useEffect 的组件或子组件内部调用,更新数据。
const refreshData = () => setRefresh(!refresh);
到目前为止一切顺利,它可以按我的意愿工作,但现在我需要导出此函数以在与此无关的组件中使用,但我知道您无法导出在组件内声明的函数。
所以我的想法是在组件外部创建同样的函数,如下所示:
let refreshOutside = false;
export const refreshMainFromOutside = () => {
refreshOutside = !refreshOutside;
}
所以现在我可以将变量“refreshOutside”添加到 useEffect,如下所示:
useEffect(async () => {
await axios.get(`${process.env.REACT_APP_SERVER_URL}/api/data/`)
.then(res => {
setData(res.data);
})
}, [refresh, refreshOutside]);
但是如果我将它导入其他组件并调用它不会触发 useEffect 的方法,我对反应有点陌生,但我认为这是因为组件没有重新渲染。
有什么解决方案可能适用于我的情况吗?
提前致谢。
【问题讨论】:
-
为什么不简单地定义一个单独的函数来获取数据并在 useEffect() 中使用它并作为回调传递给应该触发刷新的组件?
-
这样做有什么意义?你可以只调用一个调用你的 api 的函数
-
我可以,但是我无法更新主组件内的状态
标签: javascript reactjs use-effect