He visto muchos ejemplos como const store = createStore(someReducer) ¿de qué sirve convertirlo en una constante cuando queremos que se cambie a través de reductores? ¿Por qué no var?
El valor de la store nunca debe cambiar para apuntar a una nueva tienda. El estado de la tienda cambia, pero la store siempre se refiere solo a la tienda que se creó. Puede verlo en el ejemplo de la documentación de createStore :
import { createStore } from 'redux' function todos(state = [], action) { switch (action.type) { case 'ADD_TODO': return state.concat([action.text]) default: return state } } const store = createStore(todos, ['Use Redux']) store.dispatch({ type: 'ADD_TODO', text: 'Read the docs' }) console.log(store.getState()) // [ 'Use Redux', 'Read the docs' ]
store nunca obtiene un nuevo valor allí, pero el estado de la tienda a la que se refiere cambia. Observe el bit al final que obtiene el estado actual de la tienda.
Aclaremos eso agregando una llamada a getState antes del dispatch :
// console.log(Object.keys(window).sort()); const { createStore } = RTK; function todos(state = [], action) { switch (action.type) { case 'ADD_TODO': return state.concat([action.text]) default: return state } } const store = createStore(todos, ['Use Redux']) console.log("before dispatch:", JSON.stringify(store.getState())) // before dispatch: ["Use Redux"] store.dispatch({ type: 'ADD_TODO', text: 'Read the docs' }) console.log("after dispatch: ", JSON.stringify(store.getState())) // after dispatch: ["Use Redux", "Read the docs"] <script src="https://unpkg.com/@reduxjs/toolkit"></script> El estado de la tienda cambia, no qué tienda se está utilizando, por lo que store nunca cambia.
El contenido de la tienda cambiará, pero nunca lo reasignará con otra tienda, por lo tanto, const .
En general, hoy en día es mejor usar let y const , ya que tienen un alcance diferente al de var . var no se limita al alcance del bloque, por lo que las variables se sobrescriben entre sí de formas inesperadas. Considere estos dos fragmentos de código: (ejemplo de MDN )
var x = 1; if (x === 1) { var x = 2; // just changes the value of the outer variable console.log(x); // expected output: 2 } console.log(x); // expected output: 2 si usa let (o const ) en su lugar, las variables existen solo en el ámbito en el que se crean: se ocultan entre sí, pero no anulan los valores de las demás:
let x = 1; if (x === 1) { let x = 2; // new variable with the same name for the inner block, shadows the outer variable console.log(x); // expected output: 2 } console.log(x); // expected output: 1const no crea una estructura de datos inmutable, solo evita que esa variable sea reasignada .
const numbers = [1,2,3]; // mutating the object assigned to `numbers` is fine numbers.push(4); // reassigning the variable is not numbers = [1,2,3,4]; Por lo general, const se usa cuando una variable no se reasignará y cuando se desea un alcance de bloque. El objeto de la tienda redux es un gran ejemplo de eso.