Reactjs this.props和prevProps是相等的

Reactjs this.props和prevProps是相等的,reactjs,mobx,mobx-react,Reactjs,Mobx,Mobx React,在componentDidUpdate内部,道具更改时不会触发警报 您可以在codePen()中运行此代码 const state=可观察({ 伊索彭:错 }) state.close=函数(){ state.isOpen=false } state.open=函数(){ state.isOpen=true } const Home=observer(类Home扩展组件{ componentDidUpdate(prevProps){ if(this.props.store.isOpen!==pr

在componentDidUpdate内部,道具更改时不会触发警报

您可以在codePen()中运行此代码

const state=可观察({
伊索彭:错
})
state.close=函数(){
state.isOpen=false
}
state.open=函数(){
state.isOpen=true
}
const Home=observer(类Home扩展组件{
componentDidUpdate(prevProps){
if(this.props.store.isOpen!==prevProps.store.isOpen){
//此行未执行
警报(“重置”);
}
}
render(){
返回(
this.props.store.isOpen
?关闭
:打开
);
}
})
render(,document.getElementById('app'))

此.props.store
prevProps.store
将始终引用相同的
store
对象,因此
isOpen
在equals运算符的两侧将始终相同

您可以改为在组件因可观察对象的更改而更新时使用运行一些代码

const Home = observer(class home extends Component {
  componentWillReact() {
    alert('reset');
  }

  render() {
    return (
      this.props.store.isOpen
      ? <button onClick={this.props.store.close}>close</button>
      : <button onClick={this.props.store.open}>open</button>
    );
  }
})
const Home=observer(类Home扩展组件{
组件将反应(){
警报(“重置”);
}
render(){
返回(
this.props.store.isOpen
?关闭
:打开
);
}
})

您只需更改componentDidUpdate()中的if语句即可:


这些答案对你有用吗?如果是这样的话。
const Home = observer(class home extends Component {
  componentWillReact() {
    alert('reset');
  }

  render() {
    return (
      this.props.store.isOpen
      ? <button onClick={this.props.store.close}>close</button>
      : <button onClick={this.props.store.open}>open</button>
    );
  }
})
!this.props.store.isOpen ? alert("reset"): null;