Clojurescript/реагент без автоматического рендеринга

Раньше мы писали код с FB React, используя одно неизменное состояние приложения. Тем не менее, мы сделали рендеринг следующим образом:

model = immutable({name:"X"});

function change_name(name){
    swap(render(change("name", name, model))))
} 

где рендер:

function render(state){
    ReactDOM.render(<Todos app_state={state} />,document.getElementById('main'));
}

В реагенте мы используем r/atom, который при каждом обмене будет проверять, нужно ли нам делать еще один рендер. Для очень простых вещей, таких как приведенный выше, это нормально, но если операции очень сложные, включая множество операций ajax туда и обратно, лучше вручную контролировать, когда должен происходить рендеринг.

TODOMVC того, как мы работали раньше, находится здесь: http://jsfiddle.net/danbunea1/bL62p47n/


person Dan Bunea    schedule 09.12.2015    source источник


Ответы (1)


Насколько я знаю, партии реагентов меняются с помощью requestAnimationFrame, а компоненты реализуют умный shouldComponentUpdate, поэтому я бы сказал, что значения по умолчанию очень разумны для производительности, и я бы посоветовал не оптимизировать преждевременно.

Тем не менее, для выполнения того, о чем вы только что просили, просто выполните атомные мутации после того, как вы выполнили все эти дорогостоящие операции.

Таким образом, только когда вы swap!, reset! и т. д. в конце, реагент рассмотрит возможность запуска рендеринга.

person Joaquin    schedule 10.12.2015