2017-04-19 7 views
1

私はいくつかのコードを使いこなしています。 FluxやReduxなしのReactでImmutable.jsを使用するのは愚かな作業です。FluxやReduxなしでImmutable.jsを使用する

toggleTask(task) { 
    const found = _.find(this.state.taskList, task => task.name === task); 
    found.isDone = !found.isCompleted; 
    const index = _.findIndex(this.state.taskList, task => task.name === task); 

    const temp = Immutable.fromJS(this.state.taskList); 
    temp.setIn([index, 'isDone'], found.isDone).toJS(); 

    this.setState({ taskList: temp.toJS() }); 

} 

は私が、私は不変オブジェクトを作っていただった愚か者のどのくらいを実現する前に、基本的に、Immutable.jsメソッドを使用して、それを変更してからアレイに戻し、それを変更しました。浅い比較は不変のオブジェクトなしで動作するため、無駄です。

私はlodashメソッドを使用してきた
shouldComponentUpdate(nextProps) { 

    return (this.props.name !== nextProps.name || this.props.priority !== nextProps.priority || this.props.isDone !== nextProps.isDone ); 
} 

が、私は個別に小道具を比較していますし、彼らはプリミティブ(文字列やブール値などのプリミティブはとにかくimmutablesすることはできません)ですので、私は実際にそれを考えていないので、私はそれらを使用していない場合でもおそらく働いただろう。

toggleTask(task) { 
    const found = _.find(this.state.taskList, task => task.name === task); 
    found.isDone = !found.isDone; 
    this.setState({ taskList: this.state.taskList }); 
} 

ReactのImmutable.jsはReduxやFluxなしでは役に立たないと言っても間違いですか?私が正しく理解していないことがありますか?私は例を見てきましたが、FluxやReduxを使ったことがないので、私には分かりませんでした。

+0

ライブラリを正しく使用していません... Flux/Reduxとは関係ありません。 – c0deNinja

答えて

1

はい、あなたは実際に正しい軌道に乗っています。 Immutable.jsがRedux/Fluxでより有用である理由は、Immutable.jsを使用すると、深くネストされたjsonオブジェクトとの浅い比較を安価に行うことができるからです。それがその主な利点です。あなたのケースでは、あなたの状態がシンプルな配列のリストである単純なtodoアプリケーションがあると思われます。この場合、Immutable.jsの使用から何も得られません。なぜなら、高価ではないプロパティ。あなたはReduxアプリケーションでそれを必要としないかもしれませんが、大規模なプロジェクトでは、深く入れ子になったjsonオブジェクトを持つことがよくあります。その場合、Immutable.jsは非常に便利です。

+0

Redux/Fluxなしでも浅い比較が良好です。 – Sulthan

1

Immutableは、ReduxまたはFluxとは関係ありません。

FluxとReduxはImmutableなしで使用でき、ImmutableはFluxとReduxなしで使用できます。

Immutableは、不変のデータ構造に基づいて良好なプログラミングスタイルを促進するのに役立ちます。それで全部です。このようなプログラミングスタイルは、関数型プログラミングとReactで非常によく機能します。

Immutableは、同じことを行う唯一のフレームワークではありません。 Javascriptには独自のObject.freezeメソッドがあり、オブジェクトを追加のコンテナなしで不変にします。 icepickなどを使用することもできます。

+0

しかし、あなたは不変オブジェクトでsetStateを使うことはできないので、無駄です。 – aLex

+0

@aLexなぜあなたは 'setState'を不変オブジェクトで使うことができないと思いますか? – Sulthan

+0

toJS()でjavascriptオブジェクトに変換しない限り動作しません。 – aLex

関連する問題