Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
In React, can you use useState variable_1 as default value for another useState variable_2?
  1. Can you use useState variable_1 as default value for another useState variable_2, especially when variable_1 is being set by useEffect?

  2. Even simpler, can you use useState variable_1 as default value for another useState variable_2 (without the useEffect dependency)?

To elaborate, here's an example

const [firstName, setFirstName] = useState("DEFAULT_NAME");
const [fullName, setFullName] = useState(firstName); //is doing this permissible?

useEffect(() => {
  setFirstName("REAL_NAME")
}, []);

console.log(fullName); // what would be printed here?

What would the value of fullName be? Would it be set to "DEFAULT_NAME" (signaling that it was set BEFORE the useEffect was called) or be set to "REAL_NAME" (signaling that it was set AFTER the useEffect was called)?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

You can, but it usually wouldn't be a good idea. What'll happen is the second variable will be initialized to be the same as the first, but after that, they'll be completely disconnected from each other; updating either of the states later would not result in the other state changing.

Usually, in a situation where you might be thinking about something like this, it'd be better to have only a single state, with the dependent value calculated inside component (perhaps with useMemo for efficiency's sake), eg

const [firstName, setFirstName] = useState("DEFAULT_FIRST_NAME");
const [lastName, setLastName] = useState("DEFAULT_LAST_NAME");
const fullName = useMemo(() => firstName + ' ' + lastName, [firstName, lastName]);

You don't want to do, eg

const [firstName, setFirstName] = useState("DEFAULT_FIRST_NAME");
const [capitalizedName, setCapitalizedName] = useState(firstName);
// ...
  onChange=(e => {
    setFirstName(e.target.value);
    setCapitalizedName(e.target.value.toUpperCase());
  })

It's messy to have state data duplicated in more than one state variable, and it can be confusing - you don't want to call a couple of state setters when updating only a single value.

But if the logic you're looking for doesn't require that - if you really only care to initialize both states to the same thing on mount, and have them be completely separate afterwards - then what you're doing now would be just fine.

Though, I'd consider it to be a bit clearer if both default values referenced the same outer variable:

const defaultName = "DEFAULT_NAME";
const [firstName, setFirstName] = useState(defaultName);
const [fullName, setFullName] = useState(defaultName);

That has less chance of confusing readers.

about 4 years ago · Juan Pablo Isaza Denunciar

0

React components with hooks it's just a function, it executes from top to bottom; useEffect won't fires when React is ready to update it's view, it doesn't interfere with the useState initialization.

So you can do that, there's no problem. But, as @CertainPerformance mentioned at the end, it's better to just separate the defaultValue on a separate variable.

BTW, on this line:

const [fullName, setFullName] = useState(firstName);

fullName is going to be "DEFAULT_NAME" based on your example. and here as well:

console.log(fullName); // what would be printed here?
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda