Redux stdy v.1.1(61日目)


"Object.assign()"


ふへんせい


Ridexの相手について話しますassign()、そして不変性はどんな関係ですか?今日、この2つの簡単な例を通じて、リデスの特徴を理解します.
Javascriptでは、不変性とは、元のオブジェクトが破損しないことを意味します.JavaScriptが提供する方法は、大きく分けて可変と可変に分けられます.可変メソッドは、パラメータ、またはターゲットオブジェクト自体を変更します.逆に、可変の方法は、元のオブジェクトを破損させることなく、新しいオブジェクトに戻ることで動作します.
不変性そのものを変数と結びつけて理解することは本質的に不合理であるが,不変性という概念が理解しにくいといえば,以下の例でヒントを得る.
const a = 1;
let b = 1;

a = 2;  // Uncaught TypeError: Assignment to constant variable.
b = 2;  // console.log(b) --> 2;
letとして宣言された変数は、他の変数を再割り当てできますが、constは定数のように動作するため、他の変数を再割り当てできません.この場合,概念的にletは可変といえるが,constは可変といえる.オリジナルは変更できないのが不変性の核心概念です.

Reducer


JavaScriptの純関数(pure function)を使用して、reduceを使用してstateを更新できます.そしてこれを減速機と言います.この場合reduceには不変性が必要です.すなわち、reduceを構成するJavaScript関数を作成する場合は、実行方法を含むすべてのコンテンツが変更されなければなりません.
私は李徳思を勉強し始めたばかりで、まだ他の方法があるかどうか分かりませんが、私が学んだreduceを書く方法はObjectです.assign()メソッド.
「え?Object.assign()は可変で働いているんじゃないですか?」そう思える実際には、Object.assign()公式ドキュメントにおいて、動作例は、ターゲットオブジェクトが変更されたことを示す.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);  // expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);  // expected output: Object { a: 1, b: 4, c: 5 }
targetオブジェクトは上図に示すようになります.復帰目標も同じだでは、出所は何でしょうか.
console.log(source);  // expected output: Object { b: 4, c: 5 };
sourceは変更されていないことを確認できます.targetオブジェクトのみを変更します.そこで、reduce関数でObjectを選択します.assign()メソッドを使用する場合、以下の方法で不変性を維持できます.
...
return Object.assign({}, 기존 state, {
  변경하려는 state 내부의 키: [...기존 state 안에 담겨있던 값, action.payload 를 통해 전달받은 값]
})
...
stateの構成について説明していないため、上記の例は少し理解しにくいかもしれません.次はこの部分について議論し続けます.