В моем приложении Fable с Elmish у меня есть представление, которое использует реагировать-slick и кнопка, которая должна иметь возможность изменять номер слайда при нажатии:
Fable.Import.Slick.slider
[ InitialSlide model.SlideNumber
AfterChange (SlideTo >> dispatch) ]
children
Button.button
[ Button.OnClick (fun _ev -> dispatch (SlideTo 5)) ]
[ str "Go to slide 5" ]
Реакционная составляющая для ползунка определяется как react-slick
.
Оболочку басни мне пришлось написать самостоятельно, поэтому она не завершена, потому что я только определил нужные мне свойства.
module Fable.Import.Slick
open Fable.Core
open Fable.Core.JsInterop
open Fable.Helpers
open Fable.Helpers.React.Props
open Fable.Import.React
type SliderProps =
| InitialSlide of int
| AfterChange of (int -> unit)
interface IHTMLProp
let slickStyles = importAll<obj> "slick-carousel/slick/slick.scss"
let slickThemeStyles = importAll<obj> "slick-carousel/slick/slick-theme.scss"
let Slider = importDefault<ComponentClass<obj>> "react-slick/lib/slider"
let slider (b: IHTMLProp list) c = React.from Slider (keyValueList CaseRules.LowerFirst b) c
Так что, хотя react-slick
определяет свойство InitialSlide
для установки слайда, который должен первоначально отображаться, нет свойства для обновления слайда впоследствии. - это метод slickGoTo
, который должен делать то, что я хочу. Но я не знаю, как и где вызывать этот метод, оставаясь при этом совместимым с Elmish.
Я мог бы представить, что мне нужно расширить компонент реагирования и прослушать свойство модели, а затем вызывать slickGoTo
всякий раз, когда это свойство изменяется. Но я не знаю, возможно ли это.
Итак, мой вопрос: как я могу иметь кнопку, которая изменяет номер слайда при нажатии, используя slickGoTo
, который определяется компонентом, не взламывая архитектуру Elmish?