неправильный тип действия в редукторе ReasonReact - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать простое приложение todo, это компонент ввода, и мне нужен редуктор для обновления состояния ввода.Этот код выдает ошибку - This pattern matches values of type action but a pattern was expected which matches values of type unit => string

Почему-то ожидается, что action будет unit => string, и я понятия не имею, почему.Кто-нибудь может помочь?

type state = string;
type action = 
  | InputChange(string);

let component = ReasonReact.reducerComponent("Input");

let make = (~onSubmit, _children) => {
  ...component,
  initialState: () => "",
  reducer: action => 
    switch (action) {
    | InputChange(text) => ReasonReact.Update(text)
    },
  render: ({state: todo, send}) =>
    <input
      className="input"
      value=todo
      type_="text"
      placeholder="What do you want todo"
      onChange={e => send(ReactEvent.Form.target(e)##value)}
      onKeyDown={
        e =>
          if (ReactEvent.Keyboard.key(e) == "Enter") {
            onSubmit(todo);
            send(() => "");
          }
      }
    />,
};

1 Ответ

0 голосов
/ 06 декабря 2018

Тип action определяется использованием send в render, где вы передаете его () => "", функцией типа unit => string.Это должно быть send(InputChange("")).

Вам также не хватает аргумента state для reducer.Это должно быть reducer: (action, state) => ... или reducer: (action, _state) => ..., чтобы избежать неиспользованного предупреждения, поскольку вы его не используете.

...