Как правильно передать контекст React?

В компоненте App я создал состояние patientData с одним тестовым полем. После того, как компонент отрендерился, вызываю хук useEffect и передаю новое состояние для patientData. В это же время patientData я передаю в дочерние компоненты, как контекст. Проблема в том, что в дочерние компоненты изначально прилетает дефолтное состояние, а не то, которое я задал в useEffect. Как это можно исправить?

Вот мой код:

function App() {
  const [patientData, setPatientData] = useState({
    name:'TEST'
  });

  useEffect(async () => {
    const db = await firebase.database();
    const patientRefs = {
      name: db.ref('name'),
      age: db.ref('age'),
      birth: db.ref('birth'),
      gender: db.ref('gender'),
      country: db.ref('country'),
      state: db.ref('state'),
      city: db.ref('city')
    }

    patientRefs.name.on('value', (elem) => patientRefs.name = elem.val());
    patientRefs.age.on('value', (elem) => patientRefs.age = elem.val());
    patientRefs.birth.on('value', (elem) => patientRefs.birth = elem.val());
    patientRefs.gender.on('value', (elem) => patientRefs.gender = elem.val());
    patientRefs.country.on('value', (elem) => patientRefs.country = elem.val());
    patientRefs.state.on('value', (elem) => patientRefs.state = elem.val());
    patientRefs.city.on('value', (elem) => patientRefs.city = elem.val());

    setPatientData(patientRefs);
  }, []);

  useEffect(() => {
    console.log(patientData);
  }, [patientData])

  return (
    <div className='app'>
      <Context.Provider value={patientData}>
        <Sidebar />
        <Content />
      </Context.Provider>
    </div>
  );
}

Код компонента в котором мне нужно использовать patientData:

const Sidebar = () => {
    const value = useContext(Context);

    const addPatient = () => {
        //Some data
    }

    useEffect(() => {
        console.log(value.name);
    }, []);

    return (
        <div className='sidebar'>
            <div className='search'>
                <input type="text" placeholder='Search' />
                <input type="button" onClick={addPatient} value='New Patient' />
            </div>
            <div className='list'>
                <p></p>
                <p></p>
            </div>
        </div>
    );
};

И вместо большого объекта с нужными мне данными я получаю дефолтные значения, хоть стейт уже изменился


Ответы (0 шт):