2016-04-24 14 views
2

私はReact-Reduxを使用しています。私のレデューサーでは自分の状態からホスト名を削除したいと思います。だから周りを見て、私はstate.filterがこれを達成する良い方法だと分かった。しかし、これは動作していない、私は私のコンソールでエラーが発生し続けます。Reduxレデューサーでstate.filterを使用できません

index.jsすべての提案や解決策を事前に

import "babel-polyfill"; 
import React from 'react'; 
import ReactDOM from 'react-dom'; 
import {Provider} from 'react-redux'; 
import thunkMiddleware from 'redux-thunk'; 
import createLogger from 'redux-logger' 
import { HostnameAppContainer } from './components/HostnameApp'; 
import {createStore, applyMiddleware} from 'redux'; 
import hostnameApp from './reducer' 
import {fetchHostnames} from './action_creators' 

const loggerMiddleware = createLogger() 

const store = createStore(
    hostnameApp, 
    applyMiddleware(
     thunkMiddleware, // lets us dispatch() functions 
     loggerMiddleware // neat middleware that logs actions 
    ) 
) 

store.dispatch(fetchHostnames()) 

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

reducer.js

export default function(state = {hostnames:[]}, action) { 
    switch (action.type) { 
     case 'FETCH_HOSTNAMES': 
      return Object.assign({}, state, { 
       hostnames: action.hostnames 
      }) 
     case 'DELETE_HOSTNAME': 
      return state.filter(hostname => 
       hostname.id !== action.hostnameId 
      ) 
     case 'ADDED_HOSTNAME': 
      return Object.assign({}, state, { 
       hostnames: [ 
        ...state.hostnames, 
        action.object 
       ] 
      }) 
    } 
    return state; 
} 

error

ありがとう。

答えて

3

case 'DELETE_HOSTNAME'にはstate.filterと電話しています。この時点での状態はObjectであり、配列ではありません。

あなたは、おそらくこのような何かをしたいと思うでしょう:完璧に動作

case 'DELETE_HOSTNAME': 
    return { hostnames: state.hostnames.filter(hostname => 
    hostname.id !== action.hostnameId 
)} 
+0

を。もう一つの質問ですので、あなたはあなたの状態をコピーしてコピーを変更して、以前の状態を維持したいと思っています。この例では、元の状態をどうやってコピーしていますか? – Matthias

+0

[filter()メソッドは、指定された関数によって実装されたテストに合格するすべての要素を含む新しい配列を作成します。](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/フィルタ)。配列は新しいかもしれませんが、それは各ホスト名へのポインタの単なるコピーなので、hostnameの内容を変更することに注意してください。 – Kujira

+0

@Kujiraあなたは本当ですか?ソース? – softcode

関連する問題