Reactjs 如何设置redux承诺,以便axios请求有时间完成?

Reactjs 如何设置redux承诺,以便axios请求有时间完成?,reactjs,redux,promise,axios,Reactjs,Redux,Promise,Axios,新的反应和重复,所以请容忍我 我有一个react容器,它在加载时调用操作。该操作返回axios请求,理想情况下,reducer将返回结果并更新状态。但是,axios请求的结果似乎没有结束 我得到一个错误,this.props.sparts.map不是函数,sparts在我打印this.props时是空的,所以我假设请求没有完成 组件 class Spart extends Component { renderSpart() { let sparts = [] console

新的反应和重复,所以请容忍我

我有一个react容器,它在加载时调用操作。该操作返回axios请求,理想情况下,reducer将返回结果并更新状态。但是,axios请求的结果似乎没有结束

我得到一个错误,
this.props.sparts.map
不是函数,
sparts
在我打印
this.props
时是空的,所以我假设请求没有完成

组件

class Spart extends Component {
  renderSpart() {
    let sparts = []

    console.log('please print something')
    console.log(this.props)

    this.props.sparts.map((spart, index) => {
      sparts.push(
          <div class="ui column wide spart-container">
            <div class="fake-img"></div>
            <div class="audio-container">
              {spart.song}
            </div>
            <div class="writing-container">
              {spart.writing}
            </div>
          </div>
      )
    })

    return _.chunk(sparts, 3).map(function(group) {
      return <div class="three column row">{group}</div>
    })
  }

  render() {
    return (
      <div class="ui equal width grid spart-container">
        {this.renderSpart()}
      </div>
    )
  }
}

function mapStateToProps(state) {
  console.log('mapStateToProps')
  console.log(state)
  return {
    sparts: state.sparts
  };
}

function mapDispatchToProps(dispatch) {
  return bindActionCreators({ getSparts: getSparts }, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(Spart);
减速器

export default function(state = {}, action) {
  switch (action.type) {
  case GET_SPARTS:
    return [ action.payload.data, ...state ]
  default:
    return state;
  }
}
中间件

const createStoreWithMiddleware = applyMiddleware(promise)(createStore);

ReactDOM.render(
  <Provider store={createStoreWithMiddleware(reducers)}>
    <App />
  </Provider>,
  document.getElementById('root'));
const createStoreWithMiddleware=applyMiddleware(promise)(createStore);
ReactDOM.render(
,
document.getElementById('root');

如果不检查带有条件的渲染部分,这是异步操作的标准问题。使用类似以下内容:

{this.props.sparts.length > 0 && this.renderSpart()}
深入查看代码后会发现一个问题,getSparts()操作从未被调用。因此,解决方案在合适的生命周期方法(如componentDidMount)中调用它,就像OP一样:

componentDidMount() {
    this.props.getSparts();
}

谢谢,但请求仍然从未更新应用程序的状态。我不熟悉redux承诺(我更喜欢redux thunk),但我认为人们在redux操作中使用它。但是,在哪里调用getSparts()操作?我在你的Spart组件中看不到。我昨天看不到这个。我刚刚添加了这个
组件didmount(){this.props.getSparts();}
。所以这是一个问题。我以为它是自动调用的不,它不是你想象的自动调用的。你应该在需要的地方调用它。现在,在组件重新渲染后,您可以将Spart数据视为道具吗?是的,现在正在发出请求。现在正在处理一些CORS问题:)我会将您的答案标记为正确,并对我的
componentDidMount
comment进行投票
componentDidMount() {
    this.props.getSparts();
}