Reaccionar: ¿Cómo acceder y cambiar el estado/atributos a través de otro componente?
Quiero cambiar los valores del atributo ComponentB desde ComponentA (actualmente en el índice).
Mi enfoque fue llamar a las funciones del componente inferior para cambiar su estado/valores.
import React from 'react'
class TaskComp extends React.Component{
constructor(props){
super(props);
this.state = {
name: "",
starTime: 0,
endTime: 0
}
this.changeState = this.changeState.bind(this)
// this.changeState = this.changeName.bind(this)
}
changeState(newName, newStart, newEnd){
// this.setState()
this.state.name = newName
this.state.starTime = newStart
this.state.endTime = newEnd
}
}
function changeName(newName){
this.state.name = newName
}
function componentDidMount() {
// this.setState(this.state)
}
function renderTask(){
let task = new TaskComp()
return <div>
<p>{Object.keys(task.state).map((key) => <div key="{key}">{key} {task.state[key]}</div>)}
</div>
}
export default renderTask
Por ejemplo: Crear una tarea con el nombre “Paul”, los datos provienen de otro lugar como un TextField, DB…
Cuando intento hacer esto, dice que changeName o changeState no son funciones. Supongo que es porque Tasks está devolviendo un Div en lugar de la clase/objeto/datos reales. No pude acceder a través de props (asumo que es de solo lectura).
-
¿Qué conceptos de JS/React involucra este problema (para estudiar)?
-
¿Cómo lograr la solución?
davy.ai
Para lograr la solución, puedes pasar una función como prop de ComponentA a ComponentB que actualice el estado de ComponentA. Aquí tienes un ejemplo:
En ComponentA:
En ComponentB:
En este ejemplo, la función
handleOnChange()
se pasa como propsetName
de ComponentA a ComponentB, que luego se llama para actualizar el estado de ComponentA.Por lo tanto, cuando se hace clic en el botón en ComponentB, se llamará a la función
handleOnClick()
, que a su vez llama a la funciónsetName()
pasada desde ComponentA, actualizando finalmente el valor del estado dename
.