Что эквивалентно функции angular $ watch в React.js?
Я хочу прослушивать изменения состояния и вызывать такую функцию, как getSearchResults ().
componentDidMount: function() {
this.getSearchResults();
}
javascript
reactjs
Эниз Гюлек
источник
источник
Следующие методы жизненного цикла будут вызываться при изменении состояния. Вы можете использовать предоставленные аргументы и текущее состояние, чтобы определить, изменилось ли что-то значимое.
источник
componentDidUpdate
компонента с опорой было правильным рецептом. Спасибо за это.componentWillUpdate
устарел: reactjs.org/blog/2018/03/27/update-on-async-rendering.htmlcomponentDidUpdate
не будет также срабатывать при получении новых свойств, не обязательно только при изменении состояния?componentWillUpdate
не рекомендуется.Я думаю, вам следует использовать ниже Жизненный цикл компонента, как если бы у вас есть свойство ввода, которое при обновлении должно запускать обновление вашего компонента, тогда это лучшее место для этого, поскольку оно будет вызываться перед рендерингом, вы даже можете обновить состояние компонента, чтобы оно было отражается на представлении.
componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); }
источник
Начиная с React 16.8 в 2019 году с хуками useState и useEffect , следующее теперь эквивалентно (в простых случаях):
AngularJS:
$scope.name = 'misko' $scope.$watch('name', getSearchResults) <input ng-model="name" />
Реагировать:
const [name, setName] = useState('misko') useEffect(getSearchResults, [name]) <input value={name} onChange={e => setName(e.target.value)} />
источник
Использование useState с useEffect, как описано выше, является абсолютно правильным способом. Но если функция getSearchResults возвращает подписку, то useEffect должен вернуть функцию, которая будет отвечать за отказ от подписки. Функция, возвращенная из useEffect, будет запускаться перед каждым изменением зависимости (имя в приведенном выше случае) и при уничтожении компонента.
источник
Это было давно, но на будущее: можно использовать метод shouldComponentUpdate ().
static getDerivedStateFromProps() shouldComponentUpdate() render() getSnapshotBeforeUpdate() componentDidUpdate()
ссылка: https://reactjs.org/docs/react-component.html
источник
shouldComponentUpdate
поэтому оно может не подходить для этого варианта использования.В 2020 году вы можете прослушивать изменения состояния с помощью хука useEffect следующим образом
export function MyComponent(props) { const [myState, setMystate] = useState('initialState') useEffect(() => { console.log(myState, '- Has changed') },[myState]) // <-- here put the parameter to listen }
источник