javascript - React Redux(在单个文件中)在存储更改后不调用 render()

标签 javascript reactjs asynchronous redux

我正在尝试创建一个 React Redux 文件的简单示例,以演示从 API 检索数据后的更改。 reducer 肯定是在创建一个新的状态来返回,但是 render() 没有被调用。 render() 是否仅在 Provider 标签内的子组件中调用; IE。它不会调用 Provider 所在组件的 render() 吗?

任何帮助将不胜感激,我已经翻阅了数小时的文档.. :-(

import React from 'react';
import axios from 'axios';
import { createStore } from 'redux';
import { Provider } from 'react-redux';

import './App.css';

const DELAY = 10000;
const initialState = { count: 0, fact: "" };


class App extends React.Component
{
  reducer( state = initialState, action )
  {
    console.log( 'reducer', state, action );
    let newState = {};

    switch( action.type )
    {
      case "UPDATE":
        newState = { count: state.count + 1, fact: action.fact };
        console.log( 'newState', newState );
        break;

      default:
        newState = {...state};
    }

    return newState;
  }

  store = createStore( this.reducer );

  async getNumberFact( number )
  {
    const response = await axios.get(`http://numbersapi.com/${number}/math`);
    return response;
  }

  componentDidMount()
  {
    setInterval( () =>
    {
      this.getNumberFact( this.store.getState().count )
      .then( (response) =>
      {
        this.store.dispatch( { type: "UPDATE", fact: response.data } );
      } )
      .catch( (error) =>
      {
        console.log( `Totally got this error: ${error}`);
      } );

    }, DELAY );
  }

  render()
  {
    return(
      <Provider store={this.store}>
        <div>
          {console.log( this.store.getState() )}
          <p>{this.store.getState().count}</p>
          <p>{this.store.getState().fact}</p>
        </div>
      </Provider>
    );
  }
}

export default App;

最佳答案

当组件的状态或 Prop 发生变化时,就会发生更新。您的 render 函数两者都没有。我希望 {this.store.getState().count} 在挂载上运行,然后再也不会。您的组件没有 Prop ,也没有对 this.state 的引用。引用 this.store 和组件本地状态不是一回事。它是 redux store——在一个非常规的地方,我可能会补充——并且组件不直接响应 redux store。这就是像 mapStateToProps 这样的方法的用途。

https://reactjs.org/docs/react-component.html#updating

https://react-redux.js.org/using-react-redux/connect-mapstate

关于javascript - React Redux(在单个文件中)在存储更改后不调用 render(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572617/

相关文章:

javascript - 加载没有面的 PLY 文件 - Three.js

javascript - 根据最后输入的值而不是当前值对输入验证进行 react 检查

reactjs - 无效字符错误 : Failed to execute 'createElement' on 'Document' : The tag name provided ('/static/media/index.c6592bb6.ts' ) is not a valid name

javascript - 带有异步请求的 NodeJS

c# - 如何使我的自定义 TaskScheduler 成为默认任务调度程序

javascript - AngularJS : Understanding service when using $http. 帖子

javascript - 更改 DrawingManager 默认光标

javascript - "You require appropriate loaders",使用 react native 和 expo。应用程序无法在 web 上编译,但在 android 上运行

javascript - 传入样式表作为功能组件中渲染的 Prop

python - Django 和 Celery 中的异步逻辑