Este c贸digo de divisi贸n, honestamente, ya est谩 un poco cansado. Todos caminamos y caminamos en c铆rculos, y este es el principal problema.
La divisi贸n de c贸digo comenz贸 como separaci贸n en el nivel de M贸dulo y termin贸 como separaci贸n en el nivel de Componente.
Y el problema aqu铆 est谩 exclusivamente en la cabeza:
React.lazy es bueno, pero la
importaci贸n no
ha desaparecido ... Entonces, 驴por qu茅 el c贸digo se divide solo sobre los componentes?
React.lazy, React-Loadable, Loadable-Components, Imported-component: en el mundo hay muchas bibliotecas que envuelven la carga del m贸dulo en algo de az煤car, solo para procesar un poco m谩s f谩cil de usar y cargarlo. El c贸digo m铆nimo para el cargador as铆ncrono.
const loadable = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ ResultComponent: result.default || result}))
Suspense y React.lazy son solo otra forma de trabajar con el estado. Nada mas.
Pero, 驴y si no tienes un componente?
Parece que no hay problema con esto:
importar ("someStuff"). Luego ('continuar') . Pero aqu铆 nuevamente comienzan las preguntas sobre c贸mo colocarlo correctamente en el ciclo de vida de React, qu茅 hacer, si la promesa se resolvi贸 despu茅s de la muerte del componente, y as铆 sucesivamente. Y todos en la cabeza son un componente.
Realic茅 una mini encuesta: NADIE usa esta versi贸n m谩s antigua de divisi贸n de c贸digo. No sabe c贸mo comerlo en condiciones modernas. Y en general, todo es malo.
Hay una soluci贸n, y nuevamente en 4 l铆neas - renderProps
Todo es muy simple, a pesar de que el objeto de la divisi贸n del c贸digo no es el Componente sino el M贸dulo, el Componente seguir谩 siendo el lugar de la operaci贸n.
const loadableModule = (loaderFunction) => class AsyncComponent extends React.Component { state = { ResultComponent: null, error: false, }; componentWillMount() { loaderFunction .then(result => this.setState({ module: result.default || result}))
El mismo patr贸n, solo gir贸 en la direcci贸n de cargar el c贸digo y "proporcionar" este c贸digo como renderProps.
Funciona fuera de la caja:
- componentes cargables ( loadable.lib )
import loadable from '@loadable/component' const Moment = loadable.lib(() => import('moment')) function FromNow({ date }) { return ( <div> <Moment fallback={date.toLocaleDateString()}> {({ default: moment }) => moment(date).fromNow()} </Moment> </div> ) }
- reaccionar-lodable ( react-loadable-library )
import {importedLibraryDefault} from 'react-loadable-library'; const Moment = importedLibraryDefault( () => import('momentjs')); <Moment> { (momentjs) => <span> {momentjs(date).format(FORMAT)}</span> } </Moment>
- reaccionar-importado-componente ( reaccionar-importado-biblioteca )
Barato y muy enojado. Esto me permiti贸 reducir un 20% adicional. Pero, lo m谩s importante, permiti贸 configurar de manera declarativa la divisi贸n de c贸digo, que cargar谩 solo lo que se necesita y cuando es necesario.
Ahora tu movimiento,% username%.
驴Y qui茅n reescribir谩 esto en ganchos?