#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 — это переданный реквизит.
В основном вы использовали реквизит для установки состояния.