Javascript JSX中的多个if/else
我试图在jsx中的Javascript JSX中的多个if/else,javascript,reactjs,jsx,Javascript,Reactjs,Jsx,我试图在jsx中的map()中增加一个变量,并隐藏基于它的元素。我得到以下错误 未能编译。 分析错误:相邻的JSX元素必须包装在封闭标记中。你想要一个JSX片段吗 我想这是困扰我的争吵 {myIncrement%2==0&&} 有什么想法吗?(我不是全职开发人员,所以在jsx中有点迷失) 下面是该部分的完整代码 {props.config.map(row => ( (row.isRequired || props.data[row.key]) && <
map()
中增加一个变量,并隐藏基于它的元素。我得到以下错误
未能编译。分析错误:相邻的JSX元素必须包装在封闭标记中。你想要一个JSX片段吗 我想这是困扰我的争吵
{myIncrement%2==0&&}
有什么想法吗?(我不是全职开发人员,所以在jsx中有点迷失)
下面是该部分的完整代码
{props.config.map(row => (
(row.isRequired || props.data[row.key]) &&
<React.Fragment>
{row.isFullWidth ?
<div data-key-id={row.key} key={row.key} className="">
<div className="">
<div className="">some key</div>
<div className="">some value</div>
</div>
</div>
:
<React.Fragment>
{myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">}
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>}
{myIncrement = !row.isFullWidth ? myIncrement + 1 : myIncrement}
</React.Fragment>
}
</React.Fragment>
))}
{props.config.map(行=>(
(row.isRequired | | props.data[row.key])&&
{row.isFullWidth?
一些钥匙
一些价值
:
{myIncrement%2==0&&}
{row.key}:
{row.value}
{myIncrement%2==0&&}
{myIncrement=!row.isFullWidth?myIncrement+1:myIncrement}
}
))}
第一个问题:地图周围缺少碎片
基本上你不能有一个jsx看起来像
<foo/>
<bar/>
因为React无法知道根元素,它需要执行React魔术,将JSX转换为反应式HTML,相反,您需要
<>
<foo/>
<bar/>
</>
是
这就是关于相邻元素的错误消息的含义。地图将创建相邻元素:
['a', 'b', 'c'].map(letter => <div>{letter}</div>)
will produce
<div>a</div>
<div>b</div>
<div>c</div>
['a','b','c'].map(字母=>{letter})
将产生
A.
B
C
要修复此错误,只需在地图周围添加一个片段:
<>
{ props.config.map(row => (
/* ... */
)}
</>
{props.config.map(行=>(
/* ... */
)}
第二个问题:JSX语法无效
这是无效的JSX:
{ myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className=""> }
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>}
{myIncrement%2==0&&}
{row.key}:
{row.value}
{myIncrement%2==0&&}
我知道在编写它时它是有意义的,但它不会编译,因为React将尝试分别计算myIncrement%2==0&&
和myIncrement%2==0&&
,这是不可能的(现在还不可能)
您可以获得如下类似信息:
// define this part of the component somewhere
const Foo = ({ key, value}) => (
<div>
<div>{key}:</div>
<div>{value}</div>
</div>
);
// surround it or not by a div, depending on the increment value
{ myIncrement % 2 == 0 ? (
<div data-key-id={row.key} key={row.key}>
<Foo key={row.key} value={row.value}/>
</div>
) : (
<Foo key={row.key} value={row.value}/>
)
}
//在某处定义组件的这一部分
常量Foo=({key,value})=>(
{key}:
{value}
);
//是否用div将其环绕,取决于增量值
{myIncrement%2==0(
) : (
)
}
第一个问题:地图周围缺少碎片
基本上你不能有一个jsx看起来像
<foo/>
<bar/>
因为React无法知道根元素,它需要执行React魔术,将JSX转换为反应式HTML,相反,您需要
<>
<foo/>
<bar/>
</>
是
这就是有关相邻元素的错误消息的含义。地图将创建相邻元素:
['a', 'b', 'c'].map(letter => <div>{letter}</div>)
will produce
<div>a</div>
<div>b</div>
<div>c</div>
['a','b','c'].map(字母=>{letter})
将产生
A.
B
C
要修复此错误,只需在地图周围添加一个片段:
<>
{ props.config.map(row => (
/* ... */
)}
</>
{props.config.map(行=>(
/* ... */
)}
第二个问题:JSX语法无效
这是无效的JSX:
{ myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className=""> }
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>}
{myIncrement%2==0&&}
{row.key}:
{row.value}
{myIncrement%2==0&&}
我知道在编写它时它是有意义的,但它不会编译,因为React将尝试分别计算myIncrement%2==0&&
和myIncrement%2==0&&
,这是不可能的(现在还不可能)
您可以获得如下类似信息:
// define this part of the component somewhere
const Foo = ({ key, value}) => (
<div>
<div>{key}:</div>
<div>{value}</div>
</div>
);
// surround it or not by a div, depending on the increment value
{ myIncrement % 2 == 0 ? (
<div data-key-id={row.key} key={row.key}>
<Foo key={row.key} value={row.value}/>
</div>
) : (
<Foo key={row.key} value={row.value}/>
)
}
//在某处定义组件的这一部分
常量Foo=({key,value})=>(
{key}:
{value}
);
//是否用div将其环绕,取决于增量值
{myIncrement%2==0(
) : (
)
}
您不能做的事情:
<React.Fragment>
{myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">} // <= opening tag
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>} // <= Enclosing tag
{myIncrement = !row.isFullWidth ? myIncrement + 1 : myIncrement}
</React.Fragment>
{myIncrement%2==0&&}/您不能做的事情:
<React.Fragment>
{myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">} // <= opening tag
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>} // <= Enclosing tag
{myIncrement = !row.isFullWidth ? myIncrement + 1 : myIncrement}
</React.Fragment>
{myIncrement%2==0&&}//您能添加周围的代码吗?您收到的错误表明您在组件中返回了多个JSX元素,这是不允许的,它们应该用单个组件{myIncrement%2==0&&}{row.key}:{row.value}包装{myIncrement%2==0&&}`不能分离开头和结尾标记。它们必须返回together@dbramwell该错误与此代码隔离,是myIncrement%2==0
代码导致了该错误,我只是不知道如何解决它。能否添加周围的代码?您收到的错误表明您返回了多个JSX元素在您的组件中(这是不允许的),它们应该用单个组件包装`{myIncrement%2==0&&}{row.key}:{row.value}{myIncrement%2==0&&}`不能分离开头和结尾标记。它们必须返回together@dbramwell错误与此代码隔离,它是myIncrement%2==0
代码导致错误的原因,我只是不知道如何解决它。不,问题发生在第二个React内。Fragment
不需要映射之间的片段,请注意因为它返回一个数组,数组可以在JSX中呈现。这一部分很好。这也不是正确的答案。我仍然需要第二个内容放在包装器中。但是我看到了我的第一个语句的问题,但这是我必须要做的,才能使它工作。我想我必须在JSX之外和字符串concat自己解决它。不,问题发生在第二个React中。Fragment
不需要映射之间的片段,因为它返回一个数组,并且可以在JSX中呈现数组。这一部分很好。这也不是正确的答案。我仍然需要第二个内容在包装器中。但是我看到了第一个语句的问题,但这就是为什么我必须为它工作。我想我必须在JSX和字符串concat之外解决它。唯一的