Вместо того, чтобы писать свои компоненты внутри класса, я хотел бы использовать синтаксис функции.
Как переопределить componentDidMount
, componentWillMount
внутри компонентов функции?
Это вообще возможно?
const grid = (props) => {
console.log(props);
let {skuRules} = props;
const componentDidMount = () => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
};
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
Ответы:
Изменить: с введением
Hooks
можно реализовать поведение жизненного цикла, а также состояние в функциональных компонентах. В настоящее времяuseEffect
ловушка может использоваться для воспроизведения поведения жизненного цикла, иuseState
может использоваться для хранения состояния в функциональном компоненте.Базовый синтаксис:
Вы можете реализовать свой вариант использования в таких хуках, как
useEffect
также может возвращать функцию, которая будет запущена при размонтировании компонента. Это можно использовать для отказа от подписки на слушателей, копируя поведениеcomponentWillUnmount
:Например: componentWillUnmount
Чтобы
useEffect
обусловить определенные события, вы можете предоставить ему массив значений для проверки изменений:Например: componentDidUpdate
Эквивалент крючков
Если вы включаете этот массив, обязательно включайте все значения из области компонента, которые меняются с течением времени (реквизиты, состояние), или вы можете в конечном итоге ссылаться на значения из предыдущих рендеров.
В использовании есть свои тонкости
useEffect
; проверить APIHere
.До v16.7.0
Свойство функциональных компонентов состоит в том, что они не имеют доступа к функциям жизненного цикла Reacts или
this
ключевому слову. Вам необходимо расширитьReact.Component
класс, если вы хотите использовать функцию жизненного цикла.Функциональные компоненты полезны, когда вы хотите только визуализировать свой Компонент без необходимости в дополнительной логике.
источник
useEffect(() => { // action here }, [props.counter])
запускается при начальной отрисовке, а componentDidUpdate - нет.passing an empty array as second argument triggers the callback in useEffect only after the initial render
это звучит как грязный хакерский способ создания вещей: / надеюсь, команда react предложит что-то лучшее в будущих выпусках.Вы можете использовать response-pure-lifecycle, чтобы добавить функции жизненного цикла к функциональным компонентам.
Пример:
источник
Grid
? Я нигде не вижу его определения в вашем фрагменте кода? Если бы вы хотели использовать с этим и redux, не могли бы вы обойтись с чем-то вродеexport default lifecycle(methods)(connect({},{})(ComponentName))
?Решение первое: вы можете использовать новый React HOOKS API. В настоящее время в React v16.8.0
Хуки позволяют использовать больше возможностей React без классов. Хуки предоставляют более прямой API к уже знакомым вам концепциям React: реквизиты, состояние, контекст, ссылки и жизненный цикл . Хуки решают все проблемы, решаемые с помощью Recompose.
Примечание автора
recompose
(acdlite, 25 октября 2018 г.):Решение второе:
Если вы используете версию
recompose
React , которая не поддерживает хуки, не беспокойтесь, используйте (Пояс служебных программ React для функциональных компонентов и компонентов более высокого порядка). Можно использоватьrecompose
для крепленияlifecycle hooks, state, handlers etc
к функциональному компоненту.Вот компонент без рендеринга, который присоединяет методы жизненного цикла через HOC жизненного цикла (из перекомпоновки).
источник
Вы можете создавать свои собственные методы жизненного цикла.
Служебные функции
использование
источник
По документации:
см. документацию по React
источник
Если вам нужно использовать React LifeCycle, вам нужно использовать Class.
Образец:
источник
Вы можете использовать модуль create-response-class. Официальная документация
Конечно, сначала вы должны его установить
Вот рабочий пример
источник
если вы используете response 16.8, вы можете использовать React Hooks ... React Hooks - это функции, которые позволяют вам «подключаться» к функциям состояния и жизненного цикла React из функциональных компонентов ... docs
источник