PureRenderMixin
var PureRenderMixin = require('react/addons').addons.PureRenderMixin;
React.createClass({
mixins: [PureRenderMixin],
render: function() {
return <div className={this.props.className}>foo</div>;
}
});
Типы данных
Простые
Ссылочние
- Number
- String
- Boolean
- null
- undefined
- Object
- Function
- Array
Ссылочный тип
var a = {
val: 1
};
var b = a;
b.val = 2;
console.log(a.val) // #2
Сравнение
var a = [1,2,3],
b = [1,2,3];
console.log(a == b) // #false;
//Поверхностное сравнение
function equal(a,b) {
var key;
for (key in a) {
if (a[key] != b[key]) return false;
};
for (key in b) {
if (a[key] != b[key]) return false;
};
return true;
}
//todo Глубокое сравнение
Иммутабельные данные
Object.prototype.set = function (key, val) {
return this[key] === val ? this : assign({}, this, {key: val})
};
var a = {val: 1};
var b = a.set('val', 2);
console.log(a.val) // #
console.log(b.val) // #
console.log(a == b) // # false
console.log(a == a.set('val', 1)) // # true
Чистые функции
function pureSum(a,b) {
return a + b;
}
var c;
function sideEffectSum(a,b) {
c = a + b;
}
function unpureSum(a) {
return a + Math.random() * 100
}
function anotherUnpureSum(a) {
return a + c
}
Immutable.js
var Immutable = require('immutable');
var map1 = Immutable.Map({val:1});
var map2 = map1.set('val', 2);
map1.get('val'); // 1
map2.get('val'); // 2
Иммутабельные классы
function Todo(text, priority, id) {
this.text = text;
this.priority = priority;
this.id = id ? id : generateId()
}
Todo.prototype.setText = function(text) {
return text == this.text ? this : new Todo(text, this.priority, this.id)
}
Immutability
By Roman Iakobchuk
Immutability
- 1,046