javascript - React Native 使用上下文
问题描述
import React from 'react';
export function useAuth() {
const [name, setName] = React.useState('Sa');
return {name, setName};
}
import {createContext} from 'react';
export const UserContext = createContext();
import React from 'react';
import {useAuth} from './userHook';
import {UserContext} from './userContext';
import Pagesd from './pagesd';
export default function () {
const {name} = useAuth();
return (
<UserContext.Provider value={name}>
<Pagesd />
</UserContext.Provider>
);
}
import React from 'react';
import {View, Text} from 'react-native';
import {UserContext} from './userContext';
function Pagesd() {
const {name} = React.useContext(UserContext);
return (
<View>
<Text>{name}</Text>
</View>
);
}
export default Pagesd;
我希望函数 useAuth 能看到 Sa Pagesd () 输入了我在哪里做错了
我想做案例管理,但名称来自应用程序 js,但我无法访问孩子。
解决方案
到目前为止显示的代码是正确的,但有一个例外。
const {name} = React.useContext(UserContext);
该值name
正在从 的返回中解构useContext
。如果给出的值是一个对象,这很好,但我认为它不是。
<UserContext.Provider value={name}>
如果name
不是一个对象,而是一个字符串,那么解构将不起作用,并且name
将是undefined
.
要解决此问题,您有两种选择:
- 不要破坏
name
价值
const name = React.useContent(UserContext);
- 向提供者传递一个对象
<UserContext.Provider value={{name}}>
React 使用花括号{}
来表示 JavaScript 表达式,而内部花括号是对象文字属性值的简写。
推荐阅读
- rest - Postman Google API 请求给出“401:未经授权”
- c# - 如何在机器人框架 4 中使用文本提示?
- javascript - 创建具有动态行和列值的表格画布
- java - 解析 csv 时获取 urecognized 字段错误消息
- video - 什么是 ffprobe 元数据“程序”?
- c# - 有没有办法从 EF Core 的相关表中删除多对多列表属性
- node.js - 无法使用节点 js 使用 LetsEncrypt certbot 生成 SSL 证书
- html - 在页面调整大小后保持模式对话框垂直居中
- python - 使用 Pyinstaller 将 Scrapy 打包为更大程序的一部分
- javascript - 在“onchange”函数之后将元素值插入到 localStorage