React Router V6 UseContextApi:对象 null 不可迭代
React Router V6 UseContextApi: object null is not iterable
我的代码有一个小问题。
所以,这是我第一次尝试在项目上实施上下文,但出现错误:
Uncaught TypeError: object null is not iterable (cannot read 属性 Symbol(Symbol.iterator))
我猜是因为对象没有被子组件访问。
这里是父组件(My Routes)
import {UserContext} from "../Context/UserContext"
function WebRoutes() {
const [user,setUser]=useState(null);
return (
<UserContext.Provider value={(user,setUser)}>
<Router>
<Routes>
<Route path="/" element={<Login/>}/>
<Route path="/home" element={<Home/>}/>
<Route path="/departaments" element={<Departaments/>}/>
<Route path="/product/:id" element={<Product/>}/>
<Route path="*" element={<NotFound/>}/>
</Routes>
</Router>
</UserContext.Provider>
)
}
这个将是子组件:
import React, {useState, useContext} from 'react'
import {UserContext} from '../../Context/UserContext';
const [user,setUser]=useContext(UserContext)
这就是我试图获取上下文的方式。
我不知道我哪里错了。
这是 UserContext 文件:
import {createContext} from "react"
export const UserContext = createContext(null);
如有任何帮助,我将不胜感激。我正在尝试通过课程来实现这一目标。
非常感谢。
问题
value={(user, setUser)}
您提供的上下文值不正确作为 comma operator 结果。
The comma operator (,
) evaluates each of its operands (from left
to right) and returns the value of the last operand.
这意味着您只提供 setUser
函数作为上下文值。
解决方案
如果您希望 UserContext
到 return 数组:
const [user, setUser] = useContext(UserContext);
那么你应该提供一个数组值:
function WebRoutes() {
const [user, setUser] = useState(null);
return (
<UserContext.Provider value={[user, setUser]}> // <-- array
<Router>
<Routes>
<Route path="/" element={<Login />} />
<Route path="/home" element={<Home />} />
<Route path="/departaments" element={<Departaments />} />
<Route path="/product/:id" element={<Product />} />
<Route path="*" element={<NotFound />} />
</Routes>
</Router>
</UserContext.Provider>
);
}
我的代码有一个小问题。
所以,这是我第一次尝试在项目上实施上下文,但出现错误:
Uncaught TypeError: object null is not iterable (cannot read 属性 Symbol(Symbol.iterator))
我猜是因为对象没有被子组件访问。
这里是父组件(My Routes)
import {UserContext} from "../Context/UserContext"
function WebRoutes() {
const [user,setUser]=useState(null);
return (
<UserContext.Provider value={(user,setUser)}>
<Router>
<Routes>
<Route path="/" element={<Login/>}/>
<Route path="/home" element={<Home/>}/>
<Route path="/departaments" element={<Departaments/>}/>
<Route path="/product/:id" element={<Product/>}/>
<Route path="*" element={<NotFound/>}/>
</Routes>
</Router>
</UserContext.Provider>
)
}
这个将是子组件:
import React, {useState, useContext} from 'react'
import {UserContext} from '../../Context/UserContext';
const [user,setUser]=useContext(UserContext)
这就是我试图获取上下文的方式。
我不知道我哪里错了。
这是 UserContext 文件:
import {createContext} from "react"
export const UserContext = createContext(null);
如有任何帮助,我将不胜感激。我正在尝试通过课程来实现这一目标。
非常感谢。
问题
value={(user, setUser)}
您提供的上下文值不正确作为 comma operator 结果。
The comma operator (
,
) evaluates each of its operands (from left to right) and returns the value of the last operand.
这意味着您只提供 setUser
函数作为上下文值。
解决方案
如果您希望 UserContext
到 return 数组:
const [user, setUser] = useContext(UserContext);
那么你应该提供一个数组值:
function WebRoutes() {
const [user, setUser] = useState(null);
return (
<UserContext.Provider value={[user, setUser]}> // <-- array
<Router>
<Routes>
<Route path="/" element={<Login />} />
<Route path="/home" element={<Home />} />
<Route path="/departaments" element={<Departaments />} />
<Route path="/product/:id" element={<Product />} />
<Route path="*" element={<NotFound />} />
</Routes>
</Router>
</UserContext.Provider>
);
}