从无状态组件/"功能组件"返回null。

时间:2015-11-14 04:44:27

标签: reactjs

我在React 0.14中有一个无状态功能组件,它在React 0.13中工作,但现在返回以下错误:

  

在返回的组件实例上找不到render方法:您可以   忘记定义render,从a返回null / false   无状态组件,或尝试呈现类型为a的元素   函数不是React组件。

这是我的组成部分:

function ToggleDisplay(props) {
    //should render a <noscript> per React's implementation
    if(props.if === false) {
        // return <noscript></noscript>; //do I have to do this manually now?
        return null;
    }

    let style = {};
    if(shouldHide(props)) {
        style.display = 'none';
    }
    return (
        <span style={style} {...props} />
    );
}

我现在必须手动返回<noscript>吗?还有另一种方法可以在无状态组件中返回null吗?

2 个答案:

答案 0 :(得分:14)

从React 15.0开始,您可以从无状态功能组件返回null。 (见#5355)。不再需要返回<noscript />

使这成为可能的更改是React删除了对不从React.Component继承的组件类的支持,这意味着它们可以可靠地区分React组件(继承React.Component的类)和功能无状态组件。因此,启用该功能的PR仅涉及删除和简化实例化组件的the code

答案 1 :(得分:13)

看起来不是,这是Javascript中的技术约束。为了支持箭头函数和普通函数作为“组件”,React需要知道我们是否可以在它们上面调用new。

  

如果它们只是简单的功能,我们可以在所有内容上调用new   他们返回一个ReactElement。但是,这不适用   null / false / string返回值,我们也想支持它们。我们   也无法调用新的箭头功能。同样,我们也不能打电话   新课程。

Relevant GitHub Issue