当我在主组件中更改我的道具时,为什么我的道具没有转到子组件?
Why doesn't go my props to child component when I changed my props in Main Component?
当我更改我的状态时,我可以在主组件中读取 newData 但我的更新状态不会进入我的子组件。我只读取了 ChildComponent 中的 initialData。为什么不把我的新道具放到 ChildComponent 中?或者为什么不重新渲染我的 ChildComponent ?
class Main extends Component{
constructor(props) {
super(props);
this.state = {
data: "initalData",
}
}
componentDidMount(){
this.changeState();
}
changeState(){
this.setState({data: "newData"})
}
render(){
console.log("my data in Main :",this.state.data)
return(
<ChildComponent dataProps={this.state.data}>
)
}
class ChildComponent extends Component{
constructor(props) {
super(props);
const getData = props.dataProps;
console.log("getData is ",getData)
this.state = {
...,
}
}
}
因为class组件的constructor
在初始化的时候只运行一次,不是每次渲染都
要始终获取最新值,您需要将它们放在构造函数下方的 class 组件主体中。
像这样:
class ChildComponent extends Component{
constructor(props) {
super(props);
this.state = {
...
}
}
const getData = this.props.dataProps;
console.log("getData is ", getData)
render() (
...
)
}
每次传递给它的道具发生变化时,您都可以使用下面的方法进行更新
componentDidUpdate(prevProps, prevState, snapshot){
if(prevProps !== this.props){
this
}
}
当我更改我的状态时,我可以在主组件中读取 newData 但我的更新状态不会进入我的子组件。我只读取了 ChildComponent 中的 initialData。为什么不把我的新道具放到 ChildComponent 中?或者为什么不重新渲染我的 ChildComponent ?
class Main extends Component{
constructor(props) {
super(props);
this.state = {
data: "initalData",
}
}
componentDidMount(){
this.changeState();
}
changeState(){
this.setState({data: "newData"})
}
render(){
console.log("my data in Main :",this.state.data)
return(
<ChildComponent dataProps={this.state.data}>
)
}
class ChildComponent extends Component{
constructor(props) {
super(props);
const getData = props.dataProps;
console.log("getData is ",getData)
this.state = {
...,
}
}
}
因为class组件的constructor
在初始化的时候只运行一次,不是每次渲染都
要始终获取最新值,您需要将它们放在构造函数下方的 class 组件主体中。
像这样:
class ChildComponent extends Component{
constructor(props) {
super(props);
this.state = {
...
}
}
const getData = this.props.dataProps;
console.log("getData is ", getData)
render() (
...
)
}
每次传递给它的道具发生变化时,您都可以使用下面的方法进行更新
componentDidUpdate(prevProps, prevState, snapshot){
if(prevProps !== this.props){
this
}
}