Реагировать | useState из другого useState, изменения не распространяются, как я могу изменить его? - PullRequest
0 голосов
/ 09 января 2020

Имея состояние, которое меняется через некоторое время (после извлечения содержимого), если я хочу создать переменную и построить новое состояние из этого, при изменении первого состояния оно не распространяется на второе состояние

Как я могу решить это? Я не хотел бы объединять 2 состояния в одно, так как это смешало бы компоненты, которые делают разные вещи

Если у вас есть время, вы можете взглянуть на коды и поле ниже

https://codesandbox.io/s/purple-sun-mx428?fontsize=14&hidenavigation=1&theme=dark

И я вставляю сюда код

import React, { useEffect, useState } from "react";
import "./styles.css";

const wait = ms => new Promise((r, j) => setTimeout(r, ms));

const test2 = () => {
  const [test, setTest] = useState("hi");

  useEffect(() => {
    const testf = async stillMounted => {
      await wait(1000);
      setTest("bye");
    };

    const stillMounted = { value: true };
    testf(stillMounted);
    return () => {
      stillMounted.value = false;
    };
  }, []);

  return test;
};

export default function App() {
  const here = test2();
  const stru = [{ id: "whatever", content: here }];
  const [elements, setElements] = useState(stru);

  console.log(stru);
  console.log(elements);

  return (
    <div className="App">
      <h1>stru: {stru[0].content}</h1>
      <h2>elements: {elements[0].content}</h2>
    </div>
  );
}

1 Ответ

1 голос
/ 09 января 2020

Вы можете написать эффект, который запускается при изменении переменной here. Добавьте что-то подобное в ваш App компонент.

useEffect(() => {
  // This runs when 'here' changes and then updates your other state
  setElements([{ id: "whatever", content: here }])
}, [here]) // This makes this effect dependent on the 'here' variable
...