Состояние реакции, переданное как prop дочернему компоненту, не отображается

#javascript #reactjs #react-props #react-state

#javascript #reactjs #react-props #состояние реакции

Вопрос:

Я создал состояние с помощью перехватов. Затем использовал перехват, чтобы изменить его значение из другого компонента. Затем я отправляю это состояние третьему компоненту, который получает его в соответствии с инструментами разработчика Chrome, но я НЕ МОГУ ЕГО ПОКАЗАТЬ! Я схожу с ума?

Создайте состояние

 //Paso en el que estoy del stepper
let [stepper, modificarStepper] = useState({
    step: 1,
    datosFormCliente:{
        nombreCliente:'',
        apellidoCliente:'',
        cuitCliente:'',
        dir:'',
        trabajaEn:'',
        cel: 0,
    },
    urlPagare:'',
    urlBoletaSueldo:''
});
let {step, datosFormCliente} = stepper;
  

Я не показываю, как я изменяю состояние, потому что я знаю, что это сделано правильно, используя его хук: я изменяю содержимое stepper.datosFormCliente.
Затем я передаю его дочернему компоненту:

 <ControlarDatos
  datosFormCliente={datosFormCliente}
  clickPasoStepper={clickPasoStepper}
/>
  

Затем над компонентом ControlarDatos отображаются инструменты разработчика Chrome: https://ibb.co/Vxm1Mvv
Инструмент разработки Chrome, показывающий динамические изменения состояния и переход к дочернему компоненту

Итак, теперь ВОПРОС:

Через дочерний компонент я не могу просто повторить значения реквизита. Вот мой код:

 import React, { Fragment } from "react";

const ControlarDatos = (datosFormCliente) => {
  const {
    nombreCliente,
    apellidoCliente,
    cuitCliente,
    dir,
    trabajaEn,
    cel,
  } = datosFormCliente;

  return (
    <Fragment>
      <div className="alert alert-danger" role="alert">
        <h4 className="alert-heading">Controlar datos y confirmar venta</h4>
        <p>
          Ya casi terminas, solo tenés que controlar los datos del comprador y
          confirmar la venta:
        </p>
        <hr />
        <p>Nombres: {nombreCliente} </p>
        <p>Apellidos: {apellidoCliente} </p>
        <p className="mb-0"></p>
        <hr />
        <button className="btn btn-danger">Confirmar venta!</button>
      </div>
      {nombreCliente}
    </Fragment>
  );
};

export default ControlarDatos;
  

Консоль не выдает ошибок. Проект компилируется. Тем не менее, не удается отобразить эти значения.

Ответ №1:

Это потому, что вы не разрушаете datosFormCliente prop, а вместо этого называете props as datosFormCliente . Итак, это не ваш datosFormCliente prop, это props объект.

Вместо этого используйте:

 const ControlarDatos = ({ datosFormCliente }) => {
  

Комментарии:

1. Можно я тебя поцелую? вы знаете, как долго я боролся? Спасибо. Позор мне.

Ответ №2:

ответ @devserkan правильный.

Также просто небольшое улучшение, вам не нужно использовать Fragment . Вместо этого вы можете просто использовать <> ... </> .
Это то же самое.

Так что это будет так:

 import React from 'react';

const ControlarDatos = ({ datosFormCliente }) => {

const {
  nombreCliente,
  apellidoCliente,
  cuitCliente,
  dir,
  trabajaEn,
  cel
} = datosFormCliente;

  return ( 
    <>
      <div className="alert alert-danger" role="alert">
        <h4 className="alert-heading">Controlar datos y confirmar venta</h4>
        <p>Ya casi terminas, solo tenés que controlar los datos del comprador y confirmar la venta:</p>
        <hr/>
        <p>Nombres: {nombreCliente} </p>
        <p>Apellidos: {apellidoCliente} </p>
        <p className="mb-0"></p>
        <hr/>
        <button className="btn btn-danger">Confirmar venta!</button>
      </div>
      {nombreCliente}
    </>
  );
}

export default ControlarDatos;