Який еквівалент кутової функції $ watch у React.js?
Я хочу прослухати зміни стану і викликати таку функцію, як getSearchResults ().
componentDidMount: function() {
this.getSearchResults();
}
Який еквівалент кутової функції $ watch у React.js?
Я хочу прослухати зміни стану і викликати таку функцію, як getSearchResults ().
componentDidMount: function() {
this.getSearchResults();
}
Відповіді:
Я не використовував Angular, але читаючи посилання вище, здається, ви намагаєтеся кодувати те, з чим вам не потрібно працювати. Ви вносите зміни у стан своєї ієрархії компонентів React (через this.setState ()), і React призведе до повторного відображення вашого компонента (фактично «прослуховуючи» зміни). Якщо ви хочете "слухати" з іншого компонента у вашій ієрархії, у вас є два варіанти:
Наступні методи життєвого циклу будуть викликані при зміні стану. Ви можете використовувати надані аргументи та поточний стан, щоб визначити, чи змінилося щось значиме.
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentDidUpdate
компонента з опорою було правильним приписом. Дякую за це
componentWillUpdate
застаріває: reactjs.org/blog/2018/03/27/update-on-async-rendering.html
componentDidUpdate
не буде також стріляти при отриманні нових реквізитів, не обов'язково тільки при зміні штату?
componentWillUpdate
застаріло.
Я думаю, що ви повинні використовувати нижче життєвий цикл компонентів, як якщо б у вас є властивість введення, яка при оновленні потребує запуску оновлення компонента, тоді це найкраще місце, як це буде викликано, перш ніж зробити ви навіть зможете зробити стан компонента оновлення, щоб бути відображено на погляді.
componentWillReceiveProps: function(nextProps) {
this.setState({
likesIncreasing: nextProps.likeCount > this.props.likeCount
});
}
Оскільки React 16.8 у 2019 році використовує UseState та useEffect Hooks, тепер є рівнозначним (у простих випадках):
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()
shouldComponentUpdate
щоб воно не було придатним для цього випадку використання.