【问题标题】:Enable one component do display data from two api fetches启用一个组件显示来自两个 api 提取的数据
【发布时间】:2020-06-05 12:49:01
【问题描述】:

对于 React 应用程序,我使用 Redux 从 API 获取数据。在此应用程序中,存在一个在同一页面上显示两次的组件。该组件连接到一个动作和减速器。

组件的两个实例应显示不同的数据:一个显示某人的工作,另一个显示某人的电话号码。这两件事都是在单独的API调用中请求的,导致第二次调用的数据覆盖了连接到组件的reducer中第一次调用获得的数据的问题。怎么可能对这样一个显示两次的组件进行两次 API 调用,以便它的两个实例都显示这些 API 调用中的任何一个的数据?

我尝试了以下方法:提出一个请求并填充减速器。然后发出另一个请求并在reducer中合并两者的结果。但是,这种方法的问题在于,也有可能只显示应用程序中的一个组件。

这是反应组件:

class Display extends React.Component {
  componentWillMount() {
    const { fetchpayload } = this.props;
    fetchpayload(this.props.parameter);
  }

  render() {
    return (
        <h1>{this.props.payload}</h1>
    );
  }
}

const mapStateToProps = (state) => ({
  payload: state.DisplayReducer.payload,
});

const mapDispatchToProps = (dispatch) => bindActionCreators(
  {
    fetchpayload: payloadAction,
  },
  dispatch,
);

这是减速器

const initialState = {
  payload: [],
};

export function DisplayReducer(state = initialState, action) {
  switch (action.type) {
    case 'FETCHED_DISPLAY':
      return {
        ...state,
        payload: action.payload,
      };
      return state;
  }
}

动作文件发出请求,并分派“FETCHED_DISPLAY”。

【问题讨论】:

  • 这个问题是关于实现的,所以请提供一些代码
  • 感谢您的建议!我添加了组件和减速器。如果需要更多信息,请告诉我!
  • 你必须使用“payload”作为key吗?你不能只创建两个字段:“工作”和“电话号码”吗?我假设您在“this.props.parameter”中传递数据类型,因此您可以稍后使用它来显示值
  • 很遗憾没有,因为在第二个 fetch 请求之后会覆盖第一个,导致作业未定义(因为第二个请求没有包含作业)。
  • 如果您将参数传递给操作,然后基于该设置只有处于您需要设置状态的字段,一切都会好的

标签: reactjs redux react-redux


【解决方案1】:

只是不要覆盖你在 reducer 中的东西

const InitialState = {
  person: {
    name: '',
    job: ''
  }
};

export default (state = InitialState, action) => {
  switch(action.type) {
    case NAME:
      return {
        ...state.person,
        person: {
          job: ...state.person.job,
          name: action.payload
        }
      }
    case JOB:
      return {
        ...state.person,
        person: {
          name: ...state.person.name,
          job: action.payload
        }
      }
 // do that with whatever property of object person you would want to update/fetch
    }
  }
}

希望这会有所帮助。

【讨论】:

  • 但除此之外,我同意 HMR。为什么要为不同的属性获取两次相同的实体?
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2016-06-01
  • 2019-12-14
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
相关资源
最近更新 更多