2015-11-14 3 views
17

У меня есть лица без функционального компонента в React 0,14, который работал в React 0,13, но теперь возвращает следующее сообщение об ошибке:Возвращение нуля из безгосударственного компонента/«функционального компонента»

No render method found on the returned component instance: you may have forgotten to define render , returned null/false from a stateless component, or tried to render an element whose type is a function that isn't a React component.

Это мой компонент:

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 в компонент без гражданства?

+1

Почему бы вам просто не отобразить на родительском уровне? –

+0

Существует также https://www.npmjs.com/package/react-component-empty –

+1

@ DominicTobias Это должен быть приемлемый ответ, я думаю. Предотвратите предоставление компонента в первую очередь. –

ответ

13

Похоже, нет, это техническое ограничение в Javascript. Чтобы поддерживать функции стрелок и простые функции как «компоненты», необходимо, чтобы они знали, можно ли называть их новыми.

We can call new on everything if they're plain functions as long as they return a ReactElement. However, that won't work for null/false/string return values and we want to support those too. We also can't call new on arrow functions. Likewise, we can't NOT call new on classes.

Relevant GitHub Issue

9

По Реагировать 15.0, вы можете вернуть null от лица без функционального компонента. (См. #5355). Нет больше необходимости возвращать <noscript />


изменения, которые сделали это возможным, что React убрана поддержка для классов компонентов, которые не наследуют от React.Component, то есть они могут надежно различать Реагировать компоненты (классы, наследуемые React.Component) и функциональные компоненты без гражданства. Таким образом, PR для включения функций просто включает удаление и упрощение the code, которое создает компоненты.

+0

Ошибка msg была действительно ошибочной, решена для меня ... Если бы использовались две версии React – thevangelist

Смежные вопросы