请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,请帮我看一下这个关于immutable的报错

老师,请帮我看一下这个报错的原因:
The previous state received by the reducer is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: “header”.

  • 我自己检查了几次,该用immutable的地方都用了…不知道是哪里导致的出错
  • 奇怪的是,在谷歌会报错,但在safari可以正常运行。

图片描述

图片描述

图片描述

图片描述

图片描述

正在回答 回答被采纳积分+3

1回答

Dell 2020-12-31 00:01:10

list: fromJS(action.data)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3190367 #1
    不明白...
    
    (1)在changeList这个actionCreator中,专门在data属性上调用了fromJS;
    (2)在getLIst方法中把changeLIst创建的action传递给store。
    
    这样reducer接收到的action的data属性也是immutable类型的吧?如果是,在reducer中为何要对再对data调用fromJS?
    回复 有任何疑惑可以回复我~ 2020-12-31 18:40:42
  • 提问者 慕粉3190367 #2
    //src/common/header/store/reducer
    import * as constants from './constants'
    import {fromJS} from 'immutable'
    
    const defaultState=fromJS({
      focused: false,
      list: []
    })
    
    export default (state=defaultState, action)=>{
      switch(action.type){
        case constants.SEARCH_FOCUS:
          return state.set('focused', true)
        case constants.SEARCH_BLUR:
          return state.set('focused', false)
        case constants.CHANGE_LIST:
          return state.set('list', fromJS(action.data)) //用fromJS包裹action.data后,控制台仍报错...
      }
      return state
    }
    回复 有任何疑惑可以回复我~ 2020-12-31 18:58:26
  • 提问者 慕粉3190367 #3
    //src/common/header/store/actionCreators
    import * as constants from './constants'
    import axios from 'axios'
    import {fromJS} from 'immutable'
    
    const changeList = (data)=>({
      type: constants.CHANGE_LIST,
      data: fromJS(data) //在data属性上调用了fromJS;
    })
    
    export const searchFocus = ()=>({
      type: constants.SEARCH_FOCUS
    })
    
    export const searchBlur = ()=>({
      type: constants.SEARCH_BLUR
    })
    
    export const getList = ()=>{
      return (dispatch)=>{
        axios.get('./api/headerList.json').then((res)=>{
          const data = res.data
          dispatch(changeList(data.data))
        }).catch(()=>{
          console.log('error')
        })
      }
    }
    回复 有任何疑惑可以回复我~ 2020-12-31 19:01:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信