首页 > 解决方案 > React Native - 即使使用 isMounted 标志也无法对未安装的组件错误执行状态更改

问题描述

我正在开发一个 React Native 项目,并且我有一个进行 GraphQL 查询的函数:

 getPosts = async () => {
    const result = await API.graphql(graphqlOperation(listPosts))
    if(this.state.isMounted){
      this.setState({ posts: result.data.Posts.items,
        isLoading: false, isMounted: false})
    }
  }

该函数在函数中被调用componentDidMount。我还有一个isMounted字段state初始化为false. 在componentDidMount函数的最顶端,我有:

this.setState({ isMounted: true })

无论如何,我仍然收到有关尝试在已卸载组件上设置状态的警告。我还应该提到这个组件是从调用中this.props.navigation.navigate调用的。

标签: react-nativegraphqlreact-state

解决方案


为什么需要isMounted状态?如果您将此状态用作设置状态的条件,则posts可以只调用函数getPosts内部的方法,componentDidMount并且应该可以按预期工作:

async componentDidMount(){
  await getPosts()
} 

你说对了?等待您对我的回答的反馈。谢谢 :)


推荐阅读