2017-04-22 73 views
1

在下面的代码中,我需要将<li> html元素的文本设置为粗体,当变量isActive为true时否则文本应呈现为纯文本。有条件地呈现在反应中

目前我收到以下错误:

Objects are not valid as a React child (found: object with keys {title}). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of Navigation

如何解决呢?

import React from 'react' 

const idSuffix = 'navigation__' 

const Navigation = ({ onClick, id, title, tooltip, isActive }) => (

    <li id={`${idSuffix}${id}`} onClick={onClick} alt={tooltip} data-active={isActive}> 
    {isActive ? <b>{title}</b> : {title} } 

    </li> 
) 

export default Navigation 
+0

我可以确认标题是一个字符串,并且如果使用下面的组件正确呈现

  • {title}
  • Radex

    +0

    '{isActive? {title}:title}',最好使用className作为 – elmeister

    回答

    2

    title卸下大括号:

    const Navigation = ({ onClick, id, title, tooltip, isActive }) => (
        <li id={`${idSuffix}${id}`} onClick={onClick} alt={tooltip} data-active={isActive}> 
         {isActive ? <b>{title}</b> : title } 
        </li> 
    ); 
    

    如果isActive === true,所述<李>元素将包含与包裹在<b>元件的标题字符串JSX元件,否则它会只包含标题字符串,这是确定的。

    当您在标题周围加上大括号时,实际上是定义了一个对象{ title: title },这是React渲染器无法接受的。

    混淆来自JSX代码和普通JavaScript代码范围内花括号的不同含义。在JSX代码中,它们用于在元素中注入变量的值。

    +0

    确定,但为什么我应该从第二个标题中删除大括号? – Radex

    +0

    因为它已经包装在大括号中,并且第二次包装使反应渲染引擎将其视为一个对象。 – Shota