2017-12-20 13 views
2

私はreactとreduxを使用し、コンポーネントライフサイクルフックcomponentDidMountから非同期アクションを呼び出しています。 this.props.userは、サーバー呼び出しによって更新されます。私はデフォルト値で初期化しました。デフォルトの小道具は初めて使用できません。render ReactJS

問題が行1にあり、1回目のコンソール・ログ・プリント

  1. オブジェクト{名: "テスト"}および第2の時間が
  2. オブジェクト{ユーザー印刷:アレイ[30 ]、名前:「テスト」}

なぜthis.propsには初めてレンディング時にデフォルトのユーザー配列プロパティがないのですか?あなたの@connect機能で

import React from 'react'; 
    import ChildComponent from './ChildComponent'; 
    import { fetchUsers } from "./fetchGithubUser" 
    import { connect } from "react-redux" 

    const styles = { 
     fontFamily: 'sans-serif', 
     textAlign: 'center', 
     color:'green', 
    }; 

    @connect((store) => { 
     return { 
     user: store.users, 
     }; 
    }) 
    class App extends React.Component{ 

     componentDidMount() { 
     this.props.dispatch(fetchUsers()) 
     } 
     render(){ 

     console.log(this.props) // line 1 

     return(
      <div style={styles}> 
      <p> Hello World </p> 
      <ChildComponent /> 
      </div> 
     ); 
     } 
    } 
    App.defaultProps = { 
     user: [1, 2, 3, 4, 5], 
     name: 'Test' 
    } 
    export default App; 

答えて

1

だから、あなたはこれを処理する他の方法クラス

@connect((store) => { 
    return { 
    user: store.users, 
    }; 
}) 
class App extends React.Component{ 
    static defaultProps = { 
    user: [1, 2, 3, 4, 5], 
    name: 'Test' 
    } 
    componentDidMount() { 
    this.props.dispatch(fetchUsers()) 
    } 
    render(){ 

    console.log(this.props) // line 1 

    return(
     <div style={styles}> 
     <p> Hello World </p> 
     <ChildComponent /> 
     </div> 
    ); 
    } 
} 
export default App; 

の静的メンバとしてデフォルトの小道具を定義しますレデューサーで初期状態を定義することになります

const InitialState = { 
    user: [1, 2, 3, 4, 5], 
    name: 'Test' 
} 
const myReducer = (state = InitialState, action) => {} 
+0

}のアプローチ1はうまくいきますが、アプローチ2の問題があります。https://codesandbox.io/s/65nm6kx4r –

+0

これは、 'const InitialState = { ユーザー:[1、2、3、4、5]、// < - はユーザーの代わりにユーザーでなければなりません 名前: 'テスト' }'。 https://codesandbox.io/s/3kv053wzpp –

1

、デフォルトの小道具が上書きされますされ、あなたの店から来るようuser小道具に渡します。できるだけ

return { 
    user: store.users || [1, 2, 3, 4, 5], 
    }; 

また、貧弱なユーザーデータでレビュックスストアを事前に設定することもできます。あなたが接続デコレータを使用してストアを介して接続されているコンポーネントにデフォルトの小道具を渡したい場合

+0

偽のデータでレビュックスストアを事前に設定する方法はありますか?私はストアを 'const store = createStore(myReducer、middleware);として作成しています –

+0

ほとんどのreduxの例でこれを行う方法が示されています:https://github.com/reactjs/redux/blob/master/docs/api/createStore.md #example。 'function myReducer(state = {someDefaultState}、action){' –

関連する問題