2016-03-08 23 views
5

こんにちは私は状態のためにImmuteble Mapを使用しています。maspStateToPropsを試してみるとこのエラーがあります。mapStateToPropsはオブジェクトを返す必要があります。代わりにMap {}を受け取りましたか?

不知不変の違反:mapStateToPropsはオブジェクトを返す必要があります。 代わりにMap {}を受け取りました。ここで

私のコードです:

コンポーネント:https://github.com/reactjs/react-redux/issues/60

const mapStateToProps = (state) => { 
     return state 
    } 

    class LoanCalculator extends React.Component{ 

     componentWillMount(){ 
     this.dispatch(loadConstraints()); 
    } 

     render(){ 
     return (
      <div> 
      <h1> Loan Calculator </h1> 
      <SlidersBox {...this.props}/> 
     </div> 
     ) 
    } 
    } 

    LoanCalculator = connect(
     mapStateToProps 
    )(LoanCalculator) 

    export default LoanCalculator 

REDUCER

import { Map } from 'immutable' 
    import {LOAD_CONSTRAINTS, SET_AMOUNT_VALUE, SET_TERM_VALUE} from "../actions/actions"; 

    const initialState = new Map(); 

    export default function calculator(state = initialState, action){ 
     switch (action.type){ 
     case LOAD_CONSTRAINTS: 
      return state.set("constraints", action.constraints) 
     case SET_AMOUNT_VALUE: 
      return state.set("selectedAmount", action.amount) 
     case SET_TERM_VALUE: 
     return state.set("selectedTerm", action.term) 
     default: 
      return state 
     } 
    } 
+1

メッセージは言う。マップを変換するか、必要な値をオブジェクト構造体に抽出して、オブジェクトを返すようにしてください。 – Robin

+0

なぜ 'return {state}'だけではないのですか? – lux

答えて

11

はこのgithubの問題は、まさにこの問題をカバーしています。

手動であなたのmapStateToProps機能であなたの地図から必要な値を抽出することができます

const mapStateToProps = (state) => { 
    return { 
     constraints: state.get('constraints'), 
     selectedAmount: state.get('selectedAmount'), 
     selectedTerm: state.get('selectedTerm'), 
    }; 
} 
あなたの状態がmapStateToPropsがオブジェクトを返すことになっている間、あなたのエラーとして、immutable.jsからマップのように見える
+0

これは私に必要なものです。 – Grund

+0

これに加えて、これは、あなたが倒れているものを正確に念頭におくことを強要します。ある時点で、成長するコンポーネントを分割する必要があることが明らかになります。 – sean

関連する問題