Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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中更新状态时使用if时出错_Javascript_Arrays_Reactjs_Variables_If Statement - Fatal编程技术网

Javascript 在react中更新状态时使用if时出错

Javascript 在react中更新状态时使用if时出错,javascript,arrays,reactjs,variables,if-statement,Javascript,Arrays,Reactjs,Variables,If Statement,我想在条件为真时更新这个变量,但它不允许,谢谢 constructor(props){ super(props); var isActive = false; this.props.items.map(item => ( if(item.name == this.props.product.name) { isActive = true;

我想在条件为真时更新这个变量,但它不允许,谢谢

 constructor(props){
        super(props);
        var isActive = false;

        this.props.items.map(item => (
                if(item.name == this.props.product.name) {
                    isActive = true;
                }
        ));

        this.state = {
            active: isActive
        };

        console.log(isActive);
        this.handleClick = this.handleClick.bind(this);

    }

原因是,您忘记了使用
{}
,如果您正在使用任何条件或想要进行一些计算,请使用
{}
,并将所有语句放在其中。还有一件事,因为您只想迭代
数组
意味着不返回任何内容,所以在这种情况下,我使用
forEach
而不是
map
,请使用以下命令:

this.props.items.forEach(item => { //here
    if(item.name == this.props.product.name) {
          isActive = true;
    }
});
检查此代码,它将产生相同的错误:

[1,2,3,4].forEach(el=>(
如果(el%2==0)
控制台日志(el);

))
您实际上没有传递“活动”属性或状态。您正试图设置一个计算属性,很像余烬(请参见)。这被认为是一种反应,并被驳回

您应该创建一个函数,
isActive()
,并在需要时调用它。我希望您仅在呈现isActive是其属性的一组单个项组件时才需要它


也就是说,有很多方法可以将其塞进React代码库,但您的代码将无法维护。

Javascript控制台中是否有错误?这看起来不像是有效的Javascript语法,但我不知道react是否修复了它。在普通JS中,如果括号中有
if
,那么函数体周围应该有
{}
。为什么不
setState
?因为在构造函数中,我们不能在构造函数中调用setState,它应该是这样的:this.props.items.forEach((item)=>{//here if(item.name==this.props.product.name){isActive=true;}})@维德没抓住你,有什么区别?他使用的是单参数,因此
()
项不需要
。当有人需要
索引时,这很有用,也意味着多个参数:)