В чем разница? => Много.
Я думаю, версия this
используется для включения инкапсуляции, т. Е. Скрытия данных. Это помогает манипулировать частными переменными.
Давайте посмотрим на следующий пример:
var AdultPerson = function() {
var age;
this.setAge = function(val) {
// some housekeeping
age = val >= 18 && val;
};
this.getAge = function() {
return age;
};
this.isValid = function() {
return !!age;
};
};
Теперь структуру prototype
можно применить следующим образом:
У разных взрослых разные возрасты, но все взрослые получают одинаковые права. Таким образом, мы добавляем его с использованием прототипа, а не этого.
AdultPerson.prototype.getRights = function() {
// Should be valid
return this.isValid() && ['Booze', 'Drive'];
};
Давайте посмотрим на реализацию сейчас.
var p1 = new AdultPerson;
p1.setAge(12); // ( age = false )
console.log(p1.getRights()); // false ( Kid alert! )
p1.setAge(19); // ( age = 19 )
console.log(p1.getRights()); // ['Booze', 'Drive'] ( Welcome AdultPerson )
var p2 = new AdultPerson;
p2.setAge(45);
console.log(p2.getRights()); // The same getRights() method, *** not a new copy of it ***
Надеюсь, что это поможет.
Документы для withStateHandlers указывают:
withStateHandlers(
initialState: Object | (props: Object) => any,
stateUpdaters: {
[key: string]: (state:Object, props:Object) => (...payload: any[]) => Object
}
)
Это означает, что каждое свойство state-updater является функцией, которая получает аргументы state
и props
и возвращает другое функция, которая, в свою очередь, принимает необязательные аргументы полезной нагрузки (то есть все, что вы передаете в качестве аргументов при вызове onTrigger
), и возвращает новое состояние.
Ваш onTrigger
возвращает новое состояние вместо функции, поэтому тип неверен. Если вы завершите результат в функцию стрелки, он должен работать:
onTrigger: ({ active }) => () => ({
active: true
})
false
. Это имеет смысл или нет? – karolis2017 14 July 2018 в 05:10() =>
, чтобы заставить его работать вообще, но да, если компонент размонтирован и позже перемонтирован, его состояние снова инициализируется. Если вы хотите предотвратить это, вам нужно сохранить состояние в компоненте предка, который остается установленным, или использовать библиотеку управления состояниями, такую как redux. – Oblosys 14 July 2018 в 14:10