Контекст возвращает нулевое значение, в то время как useEffect возвращает объект со свойствами

#typescript #react-native #realm

#машинописный текст #реагировать-родной #область

Вопрос:

Ниже приведен компонент, который следует использовать user.id в качестве ключа раздела из контекста react, однако, когда я создаю новую задачу, он возвращает ошибку, в которой указано, что user/user.id она не определена.

Пожалуйста, посмотрите на код ниже:

 import React, {FC, SetStateAction, useEffect, useRef, useState} from 'react'; import {Text, View} from 'react-native'; import TButton from '../../components/button'; import Input from '../../components/input'; import {useAuth} from '../../lib/realmProvider'; import {useRealm} from '../../lib/syncProvider'; import {ITarget} from '../../lib/taskInterface'; import {Target} from '../../realm/taskSchema'; import {ObjectId} from 'bson';  const CreateTaskScreen: FC = () =gt; {  const [target, setTarge] = useStatelt;Partiallt;ITargetgt;gt;({  _id: '',  _partition: user?.id!,   description: '',  status: false,  createAt: new Date(Date.now()).toString(),  updateAt: '',  });  const {user} = useAuth();  const realm = useRealm();   const targetHandler = () =gt; {  try {  realm.write(() =gt; {  realm.createlt;Targetgt;('Targets', {  _id: new ObjectId(),  _partition: target._partition,  description: target.description,  status: target.status,  createAt: target.createAt,  updateAt: target.updateAt,  });  });  } catch (err) {  console.log(err);  throw err;  }  };   const testHandler = () =gt; {  console.log(user);  };   const descriptionOnChange = (e: {nativeEvent: {text: SetStateAction}}) =gt; {  let value = e.nativeEvent.text;   setTarge({description: value});  };   useEffect(() =gt; {  console.log(`from create target ${user}`);  }, [user]);  return (  lt;Viewgt;  lt;Textgt;Create a new Tasklt;/Textgt;  lt;Input  placeholder={'Targe Description'}  onChange={descriptionOnChange}  value={target.description}  multiline={true}  /gt;  lt;TButton title={'Add Target'} onPress={targetHandler} /gt;  lt;TButton title={'Test Button'} onPress={testHandler} /gt;  lt;/Viewgt;  ); };  export default CreateTaskScreen;  

Когда useEffect возвращается рендеринг компонента [object Object] . While testHandler возвращает {} значение, которое пусто

Я действительно не понимаю, что я могу делать не так с контекстом реакции

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

1. К моменту вызова вашего testHandler, похоже, функция useAuth() все еще не вернула объект user, в то время как ваш useEffect сохраняет пользовательские данные, так как вы передали пользователя в массив, который выполняет код внутри при изменении пользовательских данных. Попробуйте добавить какую-нибудь проверку перед вызовом функции testHandler, например, проверить, существует ли пользователь.

2. какой тип функции вы бы предложили?