2017-06-25 14 views
0

私はAddTodoにプロパティとしてストアに渡ししようとしていますが、私はエラーを取得しています:私は、なぜが反応:プロパティに渡し

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { Provider } from 'react-redux' 
import { connect } from 'react-redux' 
import { createStore } from 'redux' 

const todo = (state, action) => { 
    switch (action.type) { 
     case 'ADD_TODO': 
      return { 
       id: action.id, 
       text: action.text 
      } 
     default: 
      return state 
    } 
} 

const todos = (state = [], action) => { 
    switch (action.type) { 
     case 'ADD_TODO': 
      return [ 
       ...state, 
       todo(undefined, action) 
      ]; 
     default: 
      return state 
    } 
} 

let store = createStore(todos) 


let nextTodoId = 0 
const AddTodo =() => { 
    let input; 

    //this works 
    console.log(store.getState()) 
    //this doesn't 
    console.log(this.props.todos) 


    return (
     <div> 
      <input ref={node => {input = node}}/> 
      <button onClick = {() => { 
       store.dispatch({ 
        type: 'ADD_TODO', 
        id: nextTodoId++, 
        text: input.value 
       }); 
       input.value = '' 
      }}> 
       Add Todo 
      </button> 



     </div> 
    ) 
}; 

store.subscribe(AddTodo) 


ReactDOM.render(
    <AddTodo 
     todos={store.getState()} 
    />, 
    document.getElementById('root')); 

未定義

のプロパティ「ドス」を読み取ることができません私は少し混乱しています this.props.todosを印刷するとエラーが発生します。私は <AddTodo todos={...}/>

答えて

2

機能部品で小道具としてtodosに渡していたと思った異なる動作を、彼らはthisのコンテキストを持っていないが、彼らの小道具は

はそれを動作させるために、関数の引数を通過していますアルンゴーシュはこの

のようなたとえば、あなたが購読パターンを再検討すべきである、と言っているように、残りの部分については

const AddTodo = (props) => { 
    let input; 
    console.log(props.todos); 
    return (/* and the rest of your code...*/) ; 
}; 

:、ちょうどこのように、addToDosのあなたの関数呼び出しを変更私は何をやっているhttp://imgur.com/a/7y4ig -

+0

に加入する必要があり、彼は 'this.props.todos'を使用しています違う? –

+0

彼はコンポーネントを使用していませんか?機能コンポーネントを使用しています – Icepickle

+0

ahh ok。とった。これを動作させるようにしましょう。ありがとう。私はconstとコンポーネントの違いは忘れてしまった –

0

あなたはストアオブジェクトを渡し、Reduxのチュートリアルで変更

store.subscribe(() => { 
    // In our case the state will be updated when todos are set 
    console.log(store.getState().todos); 
}); 
関連する問題