получено сообщение об ошибке при использовании компонента - PullRequest
1 голос
/ 05 июня 2019

Я создаю веб-сайт с помощью ReasonReact, но я сталкиваюсь с этим сообщением об ошибке при использовании обычного компонента. Кто-нибудь знает, что происходит?

module Component1 = {
  let component = ReasonReact.statelessComponent("Component1");
  let make = () => {...component, render: self => <div />};
};

module Component2 = {
  let component = ReasonReact.statelessComponent("Component1");
  let make = () => {
    ...component,
    render: self => <div> <Component1 /></div>, /*error on compenent1*/ 
  };

Вот сообщение об ошибке:


(
  React.component('props),
  'props
) => React.element
<root>/node_modules/reason-react/src/React.re

Error: This expression has type
         unit =>
         ReasonReact.componentSpec(ReasonReact.stateless,
                                    ReasonReact.stateless,
                                    ReasonReact.noRetainedProps,
                                    ReasonReact.noRetainedProps,
                                    ReasonReact.actionless)
       but an expression was expected of type
         React.component(unit) = unit => React.element
       Type
         ReasonReact.componentSpec(ReasonReact.stateless,
                                    ReasonReact.stateless,
                                    ReasonReact.noRetainedProps,
                                    ReasonReact.noRetainedProps,
                                    ReasonReact.actionless)
       is not compatible with type React.element 

1 Ответ

1 голос
/ 06 июня 2019

Кажется, проблема в том, что вы используете проект, настроенный на использование JSX версии 3 с компонентами, разработанными для JSX версии 2.

JSX версии 3 была представлена ​​в ReasonReact 0.7.0 вместе с новымметод для определения реагирующих компонентов, который поддерживает хуки, но все еще поддерживает метод, который вы используете, пока вы настраиваете свой проект для использования JSX версии 2. Если это новый проект, который, как мне кажется, я бы рекомендовал использовать новыйстиль компонента, где ваш код будет выглядеть следующим образом:

module Component1 = {
  [@react.component]
  let make = () =>
    <div />;
};

module Component2 = {
  [@react.component]
  let make = () =>
    <div> <Component1 /> </div>;
};

В качестве альтернативы, вы можете продолжить использовать старый стиль компонентов и JSX версии 2, указав в bsconfig.json следующее:

{
  ...
  "reason": {"react-jsx": 2}
}

См. сообщение в блоге о ReasonReact 0.7.0 для получения более подробной информации.

...