#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. какой тип функции вы бы предложили?