¿Cuál es el equivalente de la función $ watch de angular en React.js?
Quiero escuchar los cambios de estado y llamar a una función como getSearchResults ().
componentDidMount: function() {
this.getSearchResults();
}
¿Cuál es el equivalente de la función $ watch de angular en React.js?
Quiero escuchar los cambios de estado y llamar a una función como getSearchResults ().
componentDidMount: function() {
this.getSearchResults();
}
Respuestas:
No he usado Angular, pero al leer el enlace de arriba, parece que estás tratando de codificar algo que no necesitas manejar. Realiza cambios de estado en su jerarquía de componentes React (a través de this.setState ()) y React hará que su componente se vuelva a representar (efectivamente 'escuchando' los cambios). Si desea 'escuchar' desde otro componente en su jerarquía, entonces tiene dos opciones:
Se invocarán los siguientes métodos de ciclo de vida cuando cambie el estado. Puede usar los argumentos proporcionados y el estado actual para determinar si algo significativo cambió.
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentDidUpdate
el componente con el prop era la receta correcta. Gracias por esto.
componentWillUpdate
está en desuso: reactjs.org/blog/2018/03/27/update-on-async-rendering.html
componentDidUpdate
no se disparará también cuando reciba nuevos accesorios, no necesariamente solo cuando cambie el estado?
componentWillUpdate
es obsoleto.
Creo que debería usar el siguiente ciclo de vida del componente como si tuviera una propiedad de entrada que en la actualización necesita para activar la actualización de su componente, este es el mejor lugar para hacerlo, ya que se llamará antes de renderizar, incluso puede hacer que el estado del componente de actualización sea reflejado en la vista.
componentWillReceiveProps: function(nextProps) {
this.setState({
likesIncreasing: nextProps.likeCount > this.props.likeCount
});
}
Desde React 16.8 en 2019 con useState y useEffect Hooks, los siguientes ahora son equivalentes (en casos simples):
AngularJS:
$scope.name = 'misko'
$scope.$watch('name', getSearchResults)
<input ng-model="name" />
Reaccionar:
const [name, setName] = useState('misko')
useEffect(getSearchResults, [name])
<input value={name} onChange={e => setName(e.target.value)} />
Usar useState con useEffect como se describió anteriormente es la forma absolutamente correcta. Pero si la función getSearchResults devuelve la suscripción, useEffect debería devolver una función que será responsable de cancelar la suscripción. La función devuelta de useEffect se ejecutará antes de cada cambio de dependencia (nombre en el caso anterior) y en la destrucción de componentes
Ha pasado un tiempo, pero para referencia futura: se puede usar el método shouldComponentUpdate ().
Una actualización puede ser causada por cambios en los accesorios o el estado. Estos métodos se invocan en el siguiente orden cuando se vuelve a representar un componente:
static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()
shouldComponentUpdate
lo que podría no ser adecuado para este caso de uso.