redux的reducers中碰到的修改数组的问题
- 在reducers中我有一个函数,它是拿到数据,然后把数据添加到数组中,我之前的想法就是说通过
newsList.unshift(action.data) return newsList
这句代码实现数据的添加,但是现在是存在错误的 - 因为在redux中的reducers是一个纯函数,它不会改变原有的数据,它只是返回一个新的数据,对于上面的数据,我们即使使用unshift之后,那么数据还是旧的。因为在redux中定义的是,我们返回的是一个数据地址,因为我们的数组即使数据添加进去了 但是返回的还是一个旧的数组,那么页面是不会重修渲染的,我们页面根本不会刷新显示新的数据
- 后面的话我用map函数把旧的数据处理了一下,返回了一个新的数组,就可以在数据改变后动态渲染数据了,也可以用数组的扩展运算符
return [action.data,...state]
使用redux-thunk模拟ajax进行数据请求
使用redux-thunk获取模拟json数据的demo链接
- 首先在使用异步操作的时候,我们在actions.js中创建一个异步函数,但是这个异步函数需要配有一个同步操作,这个异步操作不需要在action-types声明类型,但是与之对应的同步函数应该有action-types的类型说明
- 然后我们在reducers中,通过switch里面的case属性来做操作
export const additem = (data)=>({type:ADDITEM,data:data}) //这是下面异步操作中对应的同步操作
export const addnewslist = (data)=>{ //这个是真正的异步操作
return dispatch=>{
//异步的代码
fetch(data)
.then(function(response) {
return response.json();
}) //这一步得到一个promise
.then((res)=>{
const data=res;
for (const item in data) {
const name = data[item].name
const content = data[item].content
dispatch(
additem({name,content})
)
}
}).catch((error)=>{
console.log(error);
});
}
}