В React как я могу получить доступ к реквизиту перед рендерингом (без использования componentWillReceiveProps)

#reactjs

#reactjs

Вопрос:

У меня есть компонент, который рендерится на основе данных, которые преобразуются из свойств. В частности, одним из свойств компонента является прямой JSON. Затем этот JSON преобразуется компонентом в фактические данные, используемые при рендеринге.

Итак, это тот бит, который я не получаю. Если я обновил свой реквизит, функция рендеринга вызывается до того, как у меня появится возможность преобразовать в данные для рендеринга. Я обнаружил функцию componentWillReceiveProps, которая работает отлично, я могу подготовить свои данные до рендеринга.

Однако я вижу, что сейчас это устарело, а другие предложения кажутся недостаточными по-своему (либо вызываются после рендеринга, либо не вызываются при монтировании и т. Д.)

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

Какие варианты у меня есть для обновления моего компонента новыми данными и преобразования этих данных до начала рендеринга?

Для ясности это то, что я делаю. И props.data — это свойство, которое в идеале преобразуется компонентом перед рендерингом.

     let props: IComponentProps = {
        data: context.parameters.json.raw != null ? JSON.parse(context.parameters.json.raw) : undefined,
        node:  context.parameters.node.raw || undefined,
        callback: (x) => console.log(`Got a callback on ${x}`)};

    ReactDOM.render(<FluentUIDetailsListControl {...props} />, container);
 

Ответ №1:

Использовать

 static getDerivedStateFromProps(props, state) {
}
 

эта функция запускается перед функцией рендеринга в цикле создания и запускается сначала после каждого обновления.

Переменная props — это переданный реквизит.

В основном вы использовали реквизит для установки состояния.