reactjs - learn - Devolver nulo desde un componente sin estado/"componente funcional"
react js ejemplos (2)
Tengo un componente funcional sin estado en React 0.14 que funcionó en React 0.13, pero ahora devuelve el siguiente error:
No se encontró ningún método de
render
en la instancia del componente devuelto: es posible que haya olvidado definir elrender
, que haya devuelto nulo / falso desde un componente sin estado, o que haya intentado renderizar un elemento cuyo tipo sea una función que no sea un componente React.
Este es mi componente:
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} />
);
}
¿Tengo que devolver manualmente un <noscript>
ahora? ¿Hay otra manera de devolver nulo en el componente sin estado?
A partir de React 15.0, puede devolver un null
desde un componente funcional sin estado. (Ver #5355 ). No más tener que devolver <noscript />
🎉
El cambio que hizo esto posible es que React eliminó el soporte para las clases de componentes que no heredan de React.Component
, lo que significa que pueden diferenciar de manera confiable entre los componentes de React (clases que heredan React.Component
) y los componentes funcionales sin estado. Entonces, el RP para habilitar la funcionalidad solo involucró la eliminación y simplificación del código que crea una instancia de los componentes.
Parece que no, esta es una restricción técnica en Javascript. Para admitir las funciones de flecha y las funciones simples como "componentes", React necesita saber si podemos llamarles nuevos.
Podemos llamar nuevo a todo si son funciones simples siempre y cuando devuelvan un elemento ReactElement. Sin embargo, eso no funcionará para los valores de retorno nulo / falso / cadena y queremos admitirlos también. Tampoco podemos llamar nuevas funciones de flecha. Del mismo modo, no podemos llamar a nuevos en las clases.