Я не понимаю, как работает make
:
let component = ReasonReact.reducerComponent("Greeting");
let make = (~name, _children) => {
...component,
initialState: () => 0, /* here, state is an `int` */
render: (self) => {
let greeting =
"Hello " ++ name ++ ". You've clicked the button " ++ string_of_int(self.state) ++ " time(s)!";
<div>{ReasonReact.stringToElement(greeting)}</div>
}
};
Насколько я понимаю, make
будет вызываться каждый раз, когда компонент <Greeting>
используется в методе рендеринга родительского компонента, поэтому он будет вызываться несколько раз.
Но это также означает, что запись компонента будет создавать несколько раз функцию initialState
, верно?
Я не понимаю, как имеет смысл назначать initialState
некоторую функцию каждый раз, когда мы создаем элемент React, в то время как она будет вызываться только при монтировании элемента и не будет влиять на обновления.
Я беру initialState
в качестве примера, но могу сказать то же самое и для других обратных вызовов жизненного цикла.
let initialState = () => 0; let make = (~name, _children) => { ...component, initialState, render: ... };
- person Yawar   schedule 22.02.2018make
вызывается при каждом рендеринге,initialState
необходимо оценивать лениво (то, что вы моделируете как вызов по имени в Scala). Это связано с тем, что его следует оценивать только при первом вызовеmake
, а не после него. Они просто решили использовать для этого функцию. Также можно моделировать как значение OCamllazy
( caml.inria .fr/pub/docs/manual-ocaml/libref/Lazy.html ), но в скомпилированном выводе получается примерно то же самое. - person Yawar   schedule 22.02.2018