???????????????????????????????????????????????????????????????????????????????????? model д??????????????????????????????д????????????????????????????????????????:
????React.createClass({
????getInitialState: function() {
????return { value: { foo: 'bar' } };
????}??
????onClick: function() {
????var value = this.state.value;
????value.foo += 'bar'; // ANTI-PATTERN!
????this.setState({ value: value });
????}??
????render: function() {
????return (
????<div>
????<InnerComponent value={this.state.value} />
????<a onClick={this.onClick}>Click me</a>
????</div>
????);
????}
????});
????????????????????????????? { foo: 'bar' } ??? value ???????????????? a ???????????? state ????3? { value: { foo: 'barbar' } }????????????????????????????????????? { foo: 'barbar' } ??? value ???μ????
????????????????????????????????????????????????????????? onClick ?????????з???????????????????????????????????????????????????shouldComponentUpdate ??????????this.props.value.foo ?? nextProps.value.foo??????????????? this.props.value ?? nextProps.value ??????????????á?
?????????????? prop ????????????????????UI ?????? 'bar' ???μ? 'barbar'
????Immutable-js ??????
????Immutable-js ?? Lee Byron д?? JavaScript ?????????????? Facebook ??????????????????????????????????????????Щ????????:
????Immutable: ????????????????????
????Persistent: ?μ?????????????????????????????? set ?????????????????μ?????????????????Ч??
????Structural Sharing: ?μ???????t?????????????????????????????????????á?????μ?????????????????????????
????????????????????????θ????????μ????????????????????????????????????μ??? JavaScript ????
????var x = { foo: "bar" };
????var y = x;
????y.foo = "baz";
????x === y; // true
???????? y ???????????? x ???????????????????????? true???????????????????? immutable-js ??д????:
????var SomeRecord = Immutable.Record({ foo: null });
????var x = new SomeRecord({ foo: 'bar'  });
????var y = x.set('foo'?? 'baz');
????x === y; // false
????????????У??????? x ??????????μ???????????????????? x ??????
?????????????????????е?????????? setters ?????????????????????????????????? setters???????д?????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????Ч????????????????????????????????? shouldComponentUpdate ????????????????????? immutable-js ????????? props ?? state ?????????????? PureRenderMixin???????????ú????????????
????Immutable-js ?? Flux
?????????????? Flux???????????? immutable-js д??? stores??????? full API??
?????????????????е???????ò????????????????????????????????????????????????????嶨????? Record??Records ???????????????????????汣?????о???????:
????var User = Immutable.Record({
????id: undefined??
????name: undefined??
????email: undefined
????});
????var Message = Immutable.Record({
????timestamp: new Date()??
????sender: undefined??
????text: ''
????});
????Record ???????????????????????κ?????????????
????????? store ??????????? list ?????? users ?? messages:
????this.users = Immutable.List();
????this.messages = Immutable.List();
????????????????? payload ??????????????????磬?? store ?????????????????? payload ??????????????μ? record????????????б?:
????this.messages = this.messages.push(new Message({
????timestamp: payload.timestamp??
????sender: payload.sender??
????text: payload.text
????});
????????????????????????????? push ???????????? this.messages??
?????? React ????????????? immutable-js ???????????????? state?????????? PureRenderMixin ???????????е???????????????????·??