【问题标题】:How to use useEffect() inside a child component to fetch data?如何在子组件中使用 useEffect() 来获取数据?
【发布时间】:2019-12-04 18:11:48
【问题描述】:

我想知道仅当子组件包含在父组件中时,在子组件中使用useEffect 来加载数据是否有意义(或可能)。

在子组件中我有以下代码:

useEffect(() => {

    if (props.rubricItems.length < 1)
        props.fetchRubricsData(courseId);        

}, [])

但这不会触发任何调用。

您是否建议我获取父组件中的所有数据?我不想这样做以避免加载未使用的数据。有什么建议吗?

【问题讨论】:

    标签: reactjs react-hooks use-effect


    【解决方案1】:

    但这不会触发任何调用。

    为什么会这样?

    发生这种情况的原因是因为你有一个空的依赖数组[]。这意味着它只会在组件被挂载时运行,并且不再运行(如componentDidMount)。而且因为它只运行一次,在那个时候,props.rubricItems.length &lt; 1 是假的。

    仅当子组件包含在父组件中时才加载数据

    如果您有某种逻辑决定是否渲染子组件,您可以在调用该 fetch 的父组件中添加 useEffect

    例如

    您根据某些变量渲染组件。

    { foo && <ChildComponent />}
    

    因此您可以添加一个useEffect,它将在foo 值更改时运行。

    useEffect(() => {
        if(foo){ // you can add you logic here
            // fetch the data
        }
    }, [foo]) // it will only run this when foo changes
    

    【讨论】:

    • 感谢您的回答!那么一般来说,不将获取数据留给子组件是一个很好的做法(或唯一的做法)。你同意吗?
    • @renakre 这取决于,但为什么要获取子组件中的数据?
    • 只有孩子加载时才获取它。但是,正如您在回答中提到的,这可以由父母控制。所以,我想除了例外,这是怎么做的
    • 我想获取 in 子组件,因为按钮在子组件中。我想在有按钮的组件中执行 api 请求,而不是父组件。
    猜你喜欢
    • 2020-09-14
    • 2021-06-30
    • 1970-01-01
    • 2021-06-06
    • 2021-09-24
    • 2019-12-09
    • 2021-11-20
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多