Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 第一次尝试时未更新React setState_Javascript_Reactjs - Fatal编程技术网

Javascript 第一次尝试时未更新React setState

Javascript 第一次尝试时未更新React setState,javascript,reactjs,Javascript,Reactjs,我必须在同一类组件上有条件地显示一个div。但状态更改仅在第二次单击时更新 这是我的密码 constructor(props) { super(props); this.state = { openSignIn: false }; this.handleOpenSignIn = this.handleOpenSignIn.bind(this); } 设定状态 handleOpenSignIn() { this.setSta

我必须在同一类组件上有条件地显示一个div。但状态更改仅在第二次单击时更新

这是我的密码

 constructor(props) {
    super(props);
    this.state = {
        openSignIn: false
    };
    this.handleOpenSignIn = this.handleOpenSignIn.bind(this);
}
设定状态

    handleOpenSignIn() {
       this.setState({ openSignIn: true });
    }
如果“openSignIn”为真,我必须显示一个元素

<button className="nav-link px-4 border rounded-sm whiteBtn" onClick={() => this.handleOpenSignIn()}>Login</button>

{this.state.openSignIn &&
    <div>Show</div>
}
this.handleOpenSignIn()}>Login
{this.state.openSignIn&&
显示
}
显示的div仅在按钮上单击两次。 我是新来的

类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
openSignIn:错
};
this.handleOpenSignIn=this.handleOpenSignIn.bind(this);
}
手足印(){
这是我的国家({
真的吗
});
}
render(){
返回(
this.handleOpenSignIn()}
>
登录
{this.state.openSignIn&&Show}
);
}
}
ReactDOM.render(,document.getElementById('root'))


从“React”导入React;
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
此.state={
openSignIn:错
};
this.handleOpenSignIn=this.handleOpenSignIn.bind(this);
}
手足印(){
this.setState(prevState=>({
openSignIn:!prevState.openSignIn
}));
}
render(){
返回(
this.handleOpenSignIn()}
>
登录
{this.state.openSignIn&&Show}
);
}
}
如果你想切换而不是仅仅显示,你可以使用上面的代码。 您不应该像在代码段中那样更改布尔状态。


从“React”导入React;
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
此.state={
openSignIn:错
};
this.handleOpenSignIn=this.handleOpenSignIn.bind(this);
}
手足印(){
this.setState(prevState=>({
openSignIn:!prevState.openSignIn
}));
}
render(){
返回(
this.handleOpenSignIn()}
>
登录
{this.state.openSignIn&&Show}
);
}
}
如果你想切换而不是仅仅显示,你可以使用上面的代码。 您不应该像在代码段中那样更改布尔状态。

但它确实有效

但它确实有效



不确定你在问什么?请解释一下,你能提供一个相同的代码沙盒链接吗?@JobRajan我已经将你的代码转换成了一个片段,它可以正常工作。请尝试使用实际演示该问题的代码段提供。对我来说,它也在第一次单击中工作。感谢您的回复和支持。现在它工作正常了,问题是,有条件加载div是一个引导模式,因此第一次单击handleOpenSignIn时该模式不会显示。它只有在第二次点击时才会出现。现在我更改了条件“{this.state.openSignIn&&”到modal的内部内容。然后开始工作。抱歉我的错误。我刚刚开始React js,它是React js中我的第一个项目。不确定你在问什么?请解释一个比特你能提供一个相同的代码沙盒链接吗?@JobRajan我已经将你的代码转换为一个代码段,并按原样工作。请尝试使用实际演示了这个问题。对我来说,它也在第一次单击中工作。感谢您的回复和支持。现在它工作正常。问题是,有条件加载div是一个引导模式,因此该模式在第一次单击handleOpenSignIn时不显示。它只有在第二次单击时才会显示。现在我更改了条件“{St.St.OpenSigin & &“to MultMyCal含量”,然后工作。很抱歉我的错误。我刚刚开始对JS及其第一个项目进行反应JS。您的代码引入了完全不同的行为。这与“反应式SESTATE不在第一次尝试时更新”有关吗?请考虑“HooLouOpenSin”的名称。听起来它应该打开一些东西,而不是切换一些东西。@YuryTarabanko,正如您在我的代码中看到的,状态在第一次单击时就得到更新。
handleOpenSignIn
是问这个问题的人给出的。我只是说明了一种更好的使用他的代码片段的方法。它不是更好。它是不同的。他的代码也可以按原样工作。T他在别的地方出了问题。@YuryTarabanko他的代码是有效的。没错。但如果是这样的话,那么问题出在哪里?另外,你能解释一下我能做些什么来改进我的代码吗?你的代码很好。它本身没有问题。它只是实现了一个不同的用例。OP的代码“打开”了你的——“切换”与此无关,您的代码引入了完全不同的行为。这与“第一次尝试时的反应式SETSTATE不更新”有关吗?请考虑“HealOpenOpenSin”的名称。听起来它应该打开一些东西,而不是切换一些东西。@YuryTarabanko,正如您在我的代码中看到的,状态在第一次单击时就得到更新。
handleOpenSignIn
是问这个问题的人给出的。我只是说明了一种更好的使用他的代码片段的方法。它不是更好。它是不同的。他的代码也可以按原样工作。T他在别的地方出了问题。@YuryTarabanko他的代码是有效的。没错。但如果是这样的话,那么问题出在哪里?另外,你能解释一下我能做些什么来改进我的代码吗?你的代码很好。它本身没有问题。它只是实现了一个不同的用例。OP的代码“打开”了你的——“切换”:)因此与问题无关。

import React from 'react';

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      openSignIn: false
    };
    this.handleOpenSignIn = this.handleOpenSignIn.bind(this);
  }

  handleOpenSignIn() {
    this.setState(prevState => ({
      openSignIn: !prevState.openSignIn
    }));
  }

  render() {
    return (
      <div>
        <button
          className="nav-link px-4 border rounded-sm whiteBtn"
          onClick={() => this.handleOpenSignIn()}
        >
          Login
        </button>
        {this.state.openSignIn && <div>Show</div>}
      </div>
    );
  }
}