我正在学习构建一个点击pokemon api的pokemone应用,它可以为您提供更多信息。我无法确定应该将代码放在哪里,以便找出我应用所需的唯一信息。
例如,提取口袋妖怪的类型会返回一个type
对象,如下所示:
{pokemon: [...], weakAgainst: [...]}
如果这是我从我的ajax请求中获取的数据是什么,而我只想要pokemon数组,那么
我在我的actionsCreators.js中的ajax调用成功后筛选了这个,然后将其返回到商店?或
将所有数据类型对象分配给我的reducer,然后在我的reducer.js文件中筛选出pokemon数组并将其复制到我的状态?或
将整个数据对象复制到我的状态,然后在我的组件的道具(从mapStateToProps传递下来)中筛选出pokemone数组?
我认为它应该在减速机中?因为它的工作是将数据减少到您需要的数据并将其移至状态?
答案 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完全符合它的需要,返回一个新的状态而不用大惊小怪。我读过其他代码,他们喜欢在减速机中进行提升,而不是我。我想听听别人说的话。