2017-02-09 19 views
3

私はReduxで遊んでいましたが、Reactに接続することはできません。 connectmapStateToPropsと使用していますが、私の店の小道具が私のコンポーネントに渡されていません。おそらく誰かが私のコードがうまくいかない理由を明らかにすることができたでしょうか?私はそれがmapStateToProps関数と何かを持っていると思います。ReduxがReactコンポーネントに接続していません

ここで私が持っているコードです:

import { connect, Provider } from 'react-redux'; 
import { createStore, combineReducers } from 'redux'; 
import React from 'react'; 
import ReactDOM from 'react-dom';`enter code here` 


const greetReducer = (state = '', action) => { 

    if (action.type === 'greet') { 

    state = action.greeting 

    } 

    return state; 

}; 

const runReducer = (state = '', action) => { 

    if (action.type === 'run') { 

    state = action.running 

    } 

    return state; 

}; 

const reducers = combineReducers({ 

    greetState: greetReducer, 
    runState: runReducer 

}); 

const store = createStore(reducers); 

store.dispatch({ 

    type: 'greet', 
    greeting: 'Hello' 

}); 

console.log(store.getState()); 

store.dispatch({ 

    type: 'run', 
    running: 'Running like the wind' 

}); 

const App = (props) => <h1>{props.greeting}</h1>; 

const mapStateToProps = function(store) { 
    return { 
    greeting: store.getState().greetState 
    }; 
} 

connect(mapStateToProps)(App); 

ReactDOM.render(
    <Provider store={store}><App /></Provider>, 
    document.getElementById('root') 
); 

答えて

6

(というか、connectによって返される関数)connect機能は、あなたのコンポーネントを変更しませんが。変数に保存する必要がある新しいコンポーネントが返されます。

const ConnectedApp = connect(mapStateToProps)(App); 

ReactDOM.render(
    <Provider store={store}><ConnectedApp /></Provider>, 
    document.getElementById('root') 
); 
+0

ありがとうございました!それは魅力のように働いた。この質問を読んだ人には、別の間違いとしてstore.getState()をタイプしていました。greetState - ちょうどstore.greetStateでなければなりません。 –

+0

@HappyKoala:明確にするために、 'mapState'の最初の引数はストアオブジェクトではありません自体。実際にはストア内の_state_オブジェクトです。変数自体の名前は重要ではありませんが、 "正しい"名前は 'state'なので、例は' state.greetState'です。 – markerikson

+2

@markeriksonありがとう、それはそれをさらに明確にします。世界だけがJavaScriptアプリケーションで、Dan Abramovがそのアーキテクトだったなら、それは私が言うことができるすべてです。 Reduxは、私の不幸なReactアプリケーションを、既にそれよりも喜んで書いておくべきです。 –

関連する問題