У меня есть (довольно философский) вопрос, который относится к компонентам cyclejs
: Is isolate() referentially transparent?.Компоненты, функция изоляции и «ссылочная прозрачность»
Рассматривая упрощенный код, воспроизведенный после этого, я не мог отличить какой-либо источник «примеси». Это связано с тем, что это не упрощен код, или потому, что функция вернет два разных объекта с двумя разными ссылками?
В этом случае, не будут ли эти два объекта иметь одинаковое поведение (например, прослушивание и реагирование на одни и те же события на одних и тех же объектах и создание разных vTree $, но которые инкапсулируют точно такую же последовательность?). И если это так, не те ли эти два объекта, по существу, одни и те же, то есть замена одного на другое в любом месте программы не должна ничего менять? Что означает, что isolate
ссылочно прозрачен? Где я неправ?
Действительно, если оба вызова возвращают разные объекты, которые нельзя заменить, как эти объекты отличаются?
function isolate(Component, scope) {
return function IsolatedComponent(sources) {
const {isolateSource, isolateSink} = sources.DOM;
const isolatedDOMSource = isolateSource(sources.DOM, scope);
const sinks = Component({DOM: isolatedDOMSource});
const isolatedDOMSink = isolateSink(sinks.DOM, scope);
return {
DOM: isolatedDOMSink
};
};
}
ОК, я понимаю. Спасибо за разъяснения. Я пришел к выводу, что, вероятно, из-за того, что функция компонента не была чистой (в примере, который вы указываете на странице, компонент запрашивает класс DOM. В какой-то момент возвращает один элемент, когда вы добавляете второй слайдер, который возвращает два = такой же вход (класс), разные выходы). Но тогда, если я сейчас понимаю, вы решили «очистить» функцию компонента, добавив случайную область и за счет нечистой функции «изолировать». – user3743222