具体场景如下:
// reducer.js
const initialState = {
test: [
{
id: 1
show: true
},
{
id: 2
show: true
},
{
id: 3
show: true
}
]
}
export function testUp(state=initialState, action) {
switch (action.type) {
case UPDATE: {
return {
...state,
// ...action.payload, 正常情况应该这样,但是我需要处理cidList
takeCidList(state.test, action.payload)
}
}
default:
return state
}
}
function takeCidList(test, cidList) {
const list = []
// todo get initialState.test
return list
}
// test.jsx
class Test extends Component {
// ...
updateTestState = idList => {
this.props.updateTestState(idList)
// idList = [1,4,6,8] 一个id的数组
}
}
export default connect(null, {updateTestState})(Test)
// action.js
export const updateTestState = idList => ({type: UPDATE, payload: idList})
简单的说,我就是我在react组件中得到的是一个关于id的数组[1,2,3,4]。我需要做的是将state中的test数组中找出id等于[1,2,3,4]的,并把他们的show
字段变为false
。那么这样的一步操作应该在哪里做啊?
test.jsx中嘛?这样我就需要在test.jsx中获取test这个state。而且在容器组件中这样处理数据真的好吗?
reducer.js中嘛?这样感觉也不够纯粹啊?
这个的话,
state
里面的数据一般是通用型的数据,然后再根据某个组件需要的数据结构按需映射即可。至于你说在哪里做这一步,在mapStateToProps
里面去做,这样能根据组件的需要进行合适的映射,state
的数据结构最好是设计的扁平化一点儿,希望对你有帮助