2016-10-21 20 views
0

私の状態では、クエリに使用されるオブジェクトを含む配列を追跡したいと思います。私はReduxでReact.jsを使っていて、lodashパッケージを持っています。問題は、自分の状態で配列にオブジェクトを追加できないように思えることです。私の状態の配列にオブジェクトを追加できませんReact.js

私は誰かがこれを正しく行う方法を教えてくれることを願っています。

setFilterActive(type, min, max) { 
const filterObj = { 
    type: type, 
    min: min, 
    max: max 
}; 
let state = this.state; 
_.reject(state.queryObject.query.filters, filter => filterObj.isEqual(filter)); 
_.merge(filterObj,state.queryObject.query.filters); 
console.log(filterObj); 
this.setState(state); 
console.log("Filters Array:" , this.state.queryObject.filters); 
} 
+0

あなたの質問に対する回答ではありませんが、反応でreduxを使用している場合は、コンポーネントの状態を使用するべきではありません。 – OriolBG

+0

@OriolBG私はそれが本当だとは思わない。状態はまだまだ使いやすいですが、あなたが持っている状態はすべてローカライズされているはずです。これまでに状態を使用してはいけないと言っていることは不要です。 1つのことだけを入力するために入力フィールドに使用します。 – CallMeNorm

+0

申し訳ありませんが、間違っていました。この場合、配列はアプリケーションにとって本当に重要なものだと思われます。 – OriolBG

答えて

0

はこの1つを試してみてください:

は、ここに私の関数です。それは、オブジェクトを変異させるため、

setFilterActive(type, min, max) { 
    const filterObj = { 
     type: type, 
     min: min, 
     max: max 
    }; 
    let queryObject = this.state.queryObject; 
    _.reject(queryObject.query.filters, filter => filterObj.isEqual(filter)); 
    let newQueryObject = _.merge(filterObj,queryObject.query.filters); 
    console.log(filterObj); 
    this.setState({queryObject:newQueryObject}); 
    console.log("Filters Array:" , this.state.queryObject.filters); 
    } 

また提案として、あなたは_.assignではなく_.mergeを使用する必要があります。

+0

回答ありがとうございますが、私の状態の配列がqueryobjectで更新されていません:( –

+0

は作業フィドルを追加できますか? – WitVault

+0

最終的には、状態変数が最終的に私のビルドのバグである可能性があります –

関連する問題