当前位置: 首页 > 知识库问答 >
问题:

React/Redux和API数据对象

尉迟宪
2023-03-14

我的应用程序成功获取API数据并将其放入Redux状态树。

{  
   "coord":{  
      "lon":-0.13,
      "lat":51.51
   },
   "weather":[  
      {  
         "id":311,
         "main":"Drizzle",
         "description":"drizzle rain",
         "icon":"09d"
      },
      {  
         "id":501,
         "main":"Rain",
         "description":"moderate rain",
         "icon":"10d"
      }
   ],
   //-------- 
    //-------- 
    "id":2643741,
   "name":"London",
   "cod":200
}

道具。数据已传递到组件,但实际上我只能访问第一个键。例如道具。数据名称道具。数据id是可访问的。但是道具。数据库德。lon道具。数据天气映射(-),未定义。请问,我对使用API数据集的理解有什么问题?

组成部分

export const DayItem = (props) => {
  return (<MuiThemeProvider>
                <Paper zDepth={2}>
                {props.data.coord.lon} // No way!
                {props.data.name} // OK!
                </Paper>
              </MuiThemeProvider>)}

获取数据并发送动作的传奇。将数据放入Redux存储。

function* getPosition() {
  const getCurrentPosition = () => new Promise(
    (res, rej) => navigator.geolocation.getCurrentPosition(res, rej))

  // Gets user's current position assigned to const
  const pos = yield call(getCurrentPosition);
  const {latitude, longitude} = pos.coords;

  // Yields the forecast API by user coordinates
  const data = yield call(getForecastByCoords, latitude, longitude)

  // Yields user's local forecast to the reducer
  yield put({
    type: LOAD_DATA_SUCCESS,
    data
  });
}

和MapStateTops

function mapStateToProps(state) {
  return {
    chips: state.chipsReducer,
    data: state.dataReducer
  }
};

数据缩减器

export const dataReducer = (state = {}, action) => {
  switch (action.type) {
    case LOAD_DATA_SUCCESS:
      return action.data;
    default:
      return state;
  }
};

共有2个答案

干永丰
2023-03-14

必须使用MapStateTops,然后使用componentWillReceiveProps(下一步操作)

像这样的

function mapStateToProps(state) {


    return {

      data:state.toJS().yourReducer.data,

    }

然后执行下一步:

componentWillReceiveProps(nextProps) {
if (nextProps.data) {
      if (nextProps.data.coord.lon != undefined) {
        this.setState({yourData:nextProps.data.coord.lon}
      }
}
呼延辰龙
2023-03-14

最后,我明白了。问题在于渲染和数据加载的速度不同。加载总是在渲染之后进行。因此,完整的数据集不存在。

只是条件渲染使我的一天{this.state.isLoading?

 类似资料:
  • 问题内容: 我正在尝试在React中创建一个项目,并且正在使用Firebase。在我的react-redux- firebase项目中,有一行代码出错,但我无法解决。如何解决此“ TypeError:Object(…)不是函数” 我已经搜索了此问题,但无法解决该问题。 我正在关注一个React版本为16.4.1的教程。我不确定这是否是问题 index.js文件 如果我注释掉reatReduxFir

  • 在学习了一些Redux和react的教程后,我刚刚开始尝试react,但在控制台中出现了一个错误: 警告:不能给无状态函数组件提供refs(请参见登录创建的FieldGroup中的ref“username”)。访问此引用的尝试将失败。 将表单字段输入值传递给“提交”按钮的正确方法是什么?这些值应该进入redux存储吗?在阅读了文档:https://reactjs.org/docs/refs-and

  • 目录 为何组件没有被重新渲染、或者 mapStateToProps 没有运行? 为何组件频繁的重新渲染? 怎样使 mapStateToProps 执行更快? 为何不在被连接的组件中使用 this.props.dispatch ? 应该只连接到顶层组件吗,或者可以在组件树中连接到不同组件吗? React Redux 为何组件没有被重新渲染、或者 mapStateToProps 没有运行? 目前来看,

  • 问题内容: 我正在尝试了解react-redux的connect方法及其作为参数的功能。特别是。 以我的理解,它的返回值将是一个从状态派生的对象(因为它存在于商店中),其键将作为道具传递给目标组件(应用了connect的组件)。 这意味着目标组件所消耗的状态与存储在商店中的状态可能具有截然不同的结构。 问:可以吗? 问:这是预期的吗? 问:这是反模式吗? 问题答案: 问: 答:是的 问: 是的,这

  • 问题内容: 我对React和Redux非常陌生,我正在尝试将数据从一个组件传递到另一个组件。但它没有父子关系,并且彼此独立。谁能帮我做到这一点?下面是我的代码。 另一个文件是我想发送EmpNumber的位置, 问题答案: 好的,这是一个例子。我将假设您已经配置了所有Redux存储,即创建存储,rootReducer等…,因为这是一个单独的帖子。 因此,基本的想法是,当你想更新你的终极版商店状态你

  • 问题内容: 我有些困惑,很想得到一个答案,可以帮助我理清思路。假设我有一个后端(nodejs,express等),我在其中存储用户及其数据,有时我想从后端获取数据,例如用户登录后的用户信息或产品列表并保存他们在状态。 到目前为止,我所看到的方法是,在组件加载之前获取数据,并使用响应中的数据调度操作。但是我最近开始对此进行深入研究,并且看到了我较早知道的React- Thunk库,并开始怀疑从后端/