在 React 上下文 API 中获取数据后状态不会改变

Posted

技术标签:

【中文标题】在 React 上下文 API 中获取数据后状态不会改变【英文标题】:State doesn't change after fetching data in React context API 【发布时间】:2020-04-16 19:18:03 【问题描述】:

我是上下文 API 的新手,我尝试了一个简单的案例,它也能正常工作,现在我无法在从端点获取数据后将状态设置为我的上下文 API 提供程序,但它没有改变!

这是我的代码:

export const SignalementContext = new createContext();
class SignalementContextProvider extends Component 
state = 
  signalements: []
;

componentDidMount() 
  this.loadSignalement();

loadSignalement() 
  Object.assign(axios.defaults,  headers:  accept: "application/json"  );
  axios
    .get("http://localhost:3005/signalements")
    .then(res => 
      console.log("hani huni" + res.data);
      const signalements = res.data;
      this.setState( signalements: signalements );
    )
    .catch(function(error) 
      if (error.response) 
        alert(
          "Code: " +
            error.response.data.error.code +
            "\r\nMessage: " +
            error.response.data.error.message
        );
       else 
        console.log("Error", error.message);
      
    );

fetch = async () => ;
render() 
  return (
    <SignalementContext.Provider value= ...this.state >
      this.props.children
    </SignalementContext.Provider>
  );



export default SignalementContextProvider;





【问题讨论】:

信号是数组还是对象? 信号是一个数组! 【参考方案1】:

您的代码应该可以工作,但是:

您不想将状态传播到新对象中。这个上下文值在每次渲染时都是新的,你不希望这样,最好写成value=this.state 您应该只从SignalementContext 导出消费者,因为您正在通过SignalementContextProvider 实现您自己的提供者

您确定loadSignalement 中的代码不会捕获吗?

【讨论】:

是的,我肯定不会明白,这可能是一个“回调地狱”问题,因为我在另一个组件中使用了这个提供程序!

以上是关于在 React 上下文 API 中获取数据后状态不会改变的主要内容,如果未能解决你的问题,请参考以下文章

React (Native) Context API 导致 Stack Navigator (React Navigation 5) 在状态更新后重新渲染

在 axios 请求后自行更新状态?

使用上下文 API (React.js) 仅更改状态对象中的特定键

React Context : 从 API 获取数据并在 React 组件中发生某些事件时调用 API

从 React 上下文 API 的列表中删除记录后无法设置道具值

React 状态管理:上下文 API 作为全局存储