Как перерисовать элемент re-frame как элемент в ClojureScript?

У меня есть этот блок кода, когда :link-flows sub изменился, @(subscribe [:link-flows ::assign-to-flow-q]) не запускается и повторный рендеринг не запускается.

Я думаю, что это re-frame/as-element fn?

Также перенос в (fn []) вызывает ошибку из-за ошибки дочерней таблицы React, поэтому это не вариант.

Functions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it.

(let [flows @(subscribe [:link-flows ::assign-to-flow-q])]
  (re-frame/as-element
    [ant/select
     {:showSearch       true
      :optionFilterProp "children"
      :onSearch         #(dispatch [:set-ns-search-q ::assign-to-flow-q %])}
     (map (fn [flow]
            [ant/select-option
             {:value (:id flow)} (:name flow)])
          flows)]))

Есть ли способ заставить этот механизм повторного рендеринга работать?


person Ertuğrul Çetin    schedule 09.08.2019    source источник


Ответы (1)


В этом коде функция рендеринга не ясна. Чтобы произошел повторный рендеринг, подписка должна быть внутри функции рендеринга. Я бы все же предложил обернуть его внутри (fn []) и удалить (re-frame/as-element).

person user5850581    schedule 09.08.2019
comment
re-frame/as-element является обязательным, я использую Ant Design lib, поэтому мне нужно использовать as-element. - person Ertuğrul Çetin; 09.08.2019
comment
Хорошо, вы передаете это другому компоненту. В этом случае я бы предложил использовать as-element поверх этой функции. Допустим, вы определяете (defn my-fun [] ...), а затем используете (re-frame/as-element [my-fun]) вместо приведенного выше кода. - person user5850581; 09.08.2019