@Shavadrius

Как изменить состояние дочернего компонента из родителя?

Как правильно передавать инициализирующее значение в дочерний компонент (в котором есть input) из родителя?
Хочу, чтобы при изменении стейта родителя перерисовывался дочерний элемент, который зависит от этого стейта с новыми данными.

import React, { useState } from "react";

interface MyProps {
  placholder?: string;
  value?: string;
}

const MyInput = (props: MyProps) => {
  const [value, setValue] = useState("");
  const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    setValue(e.target.value);
  };
  return (
    <input
      type="text"
      placeholder={props.placholder}
      value={value}
      onChange={handleOnChange}
    />
  );
};

export default function App() {
  const [inputData, setInputData] = useState<MyProps>({
    placholder: "Init Placeholder...",
    value: "just a value..."
  });

  const handleOnClick = () => {
    let changed = { ...inputData };
    changed.placholder = "Changed ".concat(`${Math.random()}`);
    changed.value = "It's not working...".concat(`${Math.random()}`);
    setInputData(changed);
  };

  return (
    <div className="App">
      <h1>How to do...</h1>
      <MyInput {...inputData} />
      <button onClick={handleOnClick}>Pass value from props through!!!</button>
    </div>
  );
}
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Добавьте в дочерний компонент эффект, который будет зависеть от props'ов и обновлять состояние:

useEffect(() => setValue(props.value), [ props.value ]);

Это если прямо отвечать на спрошенное. Но действительно ли дочерний компонент должен хранить значение input'а у себя? Возможно, вы не конца понимаете, чего хотите, и вам надо узнать про подъём состояния.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы