Невозможно использовать статический getDerivedStateFromProps внутри Redux + Typescript Connected Component - PullRequest
0 голосов
/ 05 июля 2018

Я не могу использовать метод static внутри компонента класса, который подключен к Redux. Отчеты TypeScript

Argument of type 'typeof SAI' is not assignable to parameter of type 'ComponentType<IStateProps & IDispatchProps>'.
  Type 'typeof SAI' is not assignable to type 'StatelessComponent<IStateProps & IDispatchProps>'.
    Type 'typeof SAI' provides no match for the signature '(props: IStateProps & IDispatchProps & { children?: ReactNode; }, context?: any): ReactElement<any> | null'.

Контейнер:

export interface IStateProps {
  saiList: ISaiList
}

const mapStateToProps = (state: IRootState) => ({
  saiList: SaiListSelector(state)
});

export interface IDispatchProps {
  getSai: () => Dispatch<AnyAction>;
  postSai: (saiList: ISaiList) => Dispatch<AnyAction>;
}

const mapDispatchToProps = (dispatch: Dispatch) => ({
  getSai: () => dispatch<any>(getSaiList()),
  postSai: (saiList: ISaiList) => dispatch<any>(postSaiList(saiList))
});

export default connect(mapStateToProps, mapDispatchToProps)(SAI);

Составная часть:

interface ISAIState {
  editActive: boolean;
  localSai: ISaiList;
  sortBy: string;
}

type ISaiProps = IStateProps & IDispatchProps;

export default class SAI extends React.Component<ISaiProps> {

  public state: ISAIState = {
    editActive: false,
    localSai: [...this.props.saiList],
    sortBy: 'default'
  };

  static getDerivedStateFromProps(props: ISaiProps, state: ISAIState) {
    window.console.log(props, state);
  }

Это проблема с @types/react-redux, которая не актуальна или это что-то с моей стороны? Когда я комментирую

static getDerivedStateFromProps(props: ISaiProps, state: ISAIState) {
    window.console.log(props, state);
}

метод, все работает нормально ...

1 Ответ

0 голосов
/ 09 июля 2018

Это потому, что getDerivedStateFromProps ожидает, что объект будет возвращен.

Из официальной документации:

getDerivedStateFromProps вызывается прямо перед вызовом рендера метод, как при первоначальном монтировании, так и при последующих обновлениях. Должно вернуть объект для обновления состояния или null для обновления ничего.

...