Преобразование базовых реквизитов рендеринга в реагент

Итак, я пытаюсь сделать автозаполнение MUi с помощью реагента. это моя попытка

(def options
  (clj->js
     [{:title "title" :year 1990}
      {:title "title2" :year 2990}]))

    (defn autocomplete-text-field []
      [:> TextField
        {:label "Headers"
                 :id "header"
                 :variant "outlined"
                 :fullWidth true }
       ]
   )

(defn add-header-form []
  [:> Card
   {:style #js {:max-width 1000}}
   [:> CardHeader {:title "Add Header"}]
   [:> CardContent
    [:> Grid
     {:container true
      :direction "column"}
     [:> Autocomplete
      {
       :renderInput (r/reactify-component autocomplete-text-field)
       :options options
       :getOptionLabel #(get % :year)}

      ]
     ]
    ]]
  )

Я пытался передать это напрямую, что означает :renderInput autocomplete-text-field, но не смог понять. Я пытаюсь перевести пример на странице Mui:

https://material-ui.com/components/autocomplete/

ИЗМЕНИТЬ

<Autocomplete
  options={top100Films}
  getOptionLabel={(option: FilmOptionType) => option.title}
  style={{ width: 300 }}
  renderInput={params => (
    <TextField {...params} label="Combo box" variant="outlined" fullWidth />
  )}
/>

Итак, что мне нужно знать, как написать эквивалентный код реагента для этого свойства renderInput?

Заранее спасибо.


person jstuartmilne    schedule 05.11.2019    source источник


Ответы (1)


renderInput ожидает функцию, которая возвращает элемент React.

Вы можете сделать это в reagent через

:renderInput (fn [params] (r/as-element [autocomplete-text-field params]))

params, скорее всего, будет объектом JS, а это означает, что вам, вероятно, потребуется некоторое взаимодействие JS, чтобы применить любые реквизиты к текстовому полю. Не знаю, какой params он проходит.

person Thomas Heller    schedule 05.11.2019