Estaba revisando mi código y me di cuenta de que a veces asigno una lógica cuando declaro el estado y otras veces en ComponentDidMount.
constructor(props) { super(props); this.state = { api: localStorage.getItem("api") ? true : false, };otras veces hago esto en su lugar
constructor(props) { super(props); this.state = { api: null, }; componentDidMount() { this.setState({api: localStorage.getItem("api") ? true : false}) }Parecen comportarse de la misma manera, pero estoy seguro de que hay algunas diferencias sutiles. cual es la mas correcta
Como el flujo de ejecución de las declaraciones en reaccionar, personalmente uso constructores para stubs o inicializando funciones/variables/parámetros o configurando las funciones listas una vez que se ejecuta el procesamiento. Las razones por las que los documentos de reacción le piden que inicialice el estado en el constructor mismo es para establecer valores predefinidos en él, de modo que cuando se ejecute el componenteWillMount (obsoleto) se pueda comparar con los accesorios.
Aquí su elemento de obtención de almacenamiento local funciona porque se trata de declaraciones definidas por ventana o navegador o funciones de JS, si las escribe fuera de la clase o función, aún funcionarían. No tienen ninguna dependencia de cómo se comportará la función o la clase.
ComponentDidMount debería ser el patrón para establecer los valores o hacer algo original en su componente. Como se ejecuta después del renderizado, tiene varias capacidades útiles para hacer, como llamadas asíncronas o setState o set ref, por ejemplo: la forma en que hizo setState en didMount es establecer los valores para el componente.