【发布时间】:2016-12-18 08:30:28
【问题描述】:
我有一个简单的 reducer 示例:
import { fromJS } from 'immutable'
import {
REQUEST_SUCCESS
} from './constants'
const initialState = fromJS({
badges: []
})
function badgesReducer (state = initialState, action) {
switch (action.type) {
case REQUEST_SUCCESS:
return state
.set('badges', action.payload.badges || [])
default:
return state
}
}
export default badgesReducer
这里的想法是将徽章设置为等于action.payload.badges 内的 api 响应返回的数组,但是我相信我做错了,因为我收到以下错误:
warning.js:44 警告:失败的道具类型:无效的道具
badges类型object提供给Badges,预期为array
【问题讨论】:
-
不可变对象是一个“对象”,只需更改组件中的 propType
-
@Teo 有没有办法将它作为数组返回?
-
你确定
action.payload.badges是一个数组吗?你在proptypes中设置了什么?this.props.badges在使用它的组件中注销并抛出该错误时会是什么样子?你在哪里做你的.toJs()? -
@ajmajmajma action.payload.badges 定义返回对象数组。徽章的 propTypes 设置为数组。不确定
toJs的问题,但我相信你指的是我从国家选择徽章?我通过像 myState.get('transactions') 这样的选择器来做到这一点 -
我相信 Teo 上面所说的是你的徽章道具可能仍然是不可变的格式(即使你在 reducer 中将它设置为一个数组),这将使它成为一个对象,直到你要么@ 987654332@它或
immutableObj.get('badges')。如果不看看你是如何处理这一切的,就很难说。
标签: javascript reactjs redux immutability immutable.js