React redux架构:数据组织的位置 - 动作或存储或组件?

时间:2016-08-26 05:39:57

标签: javascript reactjs redux react-redux

我正在学习构建一个点击pokemon api的pokemone应用,它可以为您提供更多信息。我无法确定应该将代码放在哪里,以便找出我应用所需的唯一信息。

例如,提取口袋妖怪的类型会返回一个type对象,如下所示:

{pokemon: [...], weakAgainst: [...]}

如果这是我从我的ajax请求中获取的数据是什么,而我只想要pokemon数组,那么

  1. 我在我的actionsCreators.js中的ajax调用成功后筛选了这个,然后将其返回到商店?或

  2. 将所有数据类型对象分配给我的reducer,然后在我的reducer.js文件中筛选出pokemon数组并将其复制到我的状态?或

  3. 将整个数据对象复制到我的状态,然后在我的组件的道具(从mapStateToProps传递下来)中筛选出pokemone数组?

  4. 我认为它应该在减速机中?因为它的工作是数据减少到您需要的数据并将其移至状态?

1 个答案:

答案 0 :(得分:1)

我认为如果你有办法,你应该把减速机交给它所需要的东西。不可避免地,你需要按摩和操纵减速器中的数据,但如果你可以最小化它,我会。你的减速器应该是一个纯粹的功能 - 没有副作用,减速器总是在相同的输入等情况下返回相同的输出。我喜欢通过给减速器提供它所需要的减少“副作用”,特别是因为你需要切换的数据很好地交给你.. ala。

你的actionCreator

export function getPokemanApiData() {
  return dispatch => {
    axios.get(APIS.getPokemanURL)
      .then((response) => {
        dispatch(getSuccess(response))
      })
      .catch((err) => {
        dispatch(getError(err))
      })
  }
}

function getSuccess(response) {
   return {
      type: TYPES.MY_POKEMAN_TYPE,
      payload: response.pokemon

   }
}

减速器

case TYPES.MY_POKEMAN_TYPE:
   return {
      ...state,
      pokemonData: action.paylod
   }

所以,我看到它的方式 - 尝试减少副作用,减少减速器必须做的工作量。使事情更容易测试。在上面的例子中,reducer完全符合它的需要,返回一个新的状态而不用大惊小怪。我读过其他代码,他们喜欢在减速机中进行提升,而不是我。我想听听别人说的话。