【发布时间】:2021-06-26 11:44:35
【问题描述】:
我正在制作一个小应用程序,它获取数据,显示在 DOM 中,并选择一个显示所选用户信息的项目,我通过名为 UserState 的状态管理器处理所有这些,我还将方法添加到显示用户。然后作为一个组件,我有 UserList 和 UserProfile。
这是应该如何工作的,Capture 1
UserState.js
import React, {useState} from 'react';
import UserContext from './UserContext';
import axios from 'axios';
function UserState(props) {
const initialState = {
users:[],
selectedUser:null
}
const [state, setState] = useState(initialState)
const getUsers = async() =>{
const res = await axios.get("https://reqres.in/api/users")
const data = res.data.data
setState({users:data,
selectedUser:null})
}
const getProfile = async (id) => {
const res = await axios.get("https://reqres.in/api/users/"+id)
const {data} = await res.data;
console.log('Item Selected:',data)
console.log(setState({selectedUser:data}))
}
return (
<UserContext.Provider
value={{
users:state.users,
selectedUser: state.selectedUser,
getUsers,
getProfile
}}
>
{props.children}
</UserContext.Provider>
)
}
export default UserState
我通过 Hook useContext 导出该状态及其方法,当我尝试选择用户时问题开始,控制台显示以下错误。
UserList.js
import React,{useContext,useEffect} from 'react'
import UserContext from "../context/User/UserContext"
function UserList(props) {
const userContext = useContext(UserContext)
useEffect(() => {
userContext.getUsers();
},[])
return (
<div>
<h1>UserList</h1>
{userContext.users.map(user=>{
return(
<a
key={user.id}
href="#!"
onClick={()=> userContext.getProfile(user.id)}
>
<img src={user.avatar} alt="" width="70"/>
<p>{user.first_name} {user.last_name}</p>
<p>{user.email}</p>
</a>)
}): null}
</div>
)
}
export default UserList
Profile.js
import React,{useContext} from 'react'
import UserContext from '../context/User/UserContext'
function Profile() {
const {selectedUser} = useContext(UserContext)
return (
<>
<h1>Profile</h1>
{selectedUser ?
(
<div>
<h1>Selected Profile</h1>
{/* <img
src={selectedUser.avatar}
alt=""
style={{width:150}}
/> */}
</div>
):(<div>
No User Selected
</div>)}
</>
)
}
export default Profile
控制台错误
我尝试更改 selectedUser 的值,但每次控制台都显示该错误。
【问题讨论】:
标签: javascript reactjs ecmascript-6 state key-value