我创建了一个之前已预先创建数据的小应用程序。const users = { [id:1, name: ... etc
但我决定走得更远一点,用https://randomuser.me
这种方式使用 api,至少我可以使用 React 提供的一些 Hooks。
然而,在我的游戏中,我似乎遇到了一个我似乎无法理解的错误。我已经注销了我的 API 调用并得到了users
回复,但我无法将它们放在旁边的表格中。
有几个文件,所以我将它们全部添加以使其可读。
当我单击“添加用户”按钮时,我最初遇到的错误再次是“用户不可迭代”,并且在加载时显示没有任何新用户,当我看到 API 调用已触发时并记录它确实有从 API 中提取的用户
应用程序.js
import React, { useEffect, useState } from 'react';
import UserTable from './tables/UserTable'
import AddUserForm from './forms/AddUserForm'
import { getUsers } from './services/getUsers.services'
const App = () => {
const [users, setUsers] = useState([])
useEffect(() => {
getUsers().then(users => {
setUsers(users);
console.log(users)
});
}, []);
const addUser = (user) => {
user.id = users.length + 1
setUsers([...users, user])
}
return (
<div className="container">
<h1> CRUD with Hooks :)</h1>
<div className="flex-row">
<div className="flex-large">
<h2>Add user</h2>
<AddUserForm addUser={addUser} />
</div>
<div className="flex-large">
<h2>View Users</h2>
<UserTable users={users} />
</div>
</div>
</div>
);
}
export default App;
getUsers.services.js
export const getUsers = async () => {
const data = await fetch('https://randomuser.me/api/?results=5');
return data.json()
}
添加用户表单
import React, {useState} from 'react'
const AddUserForm = (props) => {
const initialFormState = {id: null, name: '', username: ''}
const [user,setUser] = useState(initialFormState)
const handleInputChange = (event) => {
const {name , value} = event.target
setUser({...user, [name]: value })
}
return (
<form
onSubmit={(event) => {
event.preventDefault()
if (!user.name || !user.username) return
props.addUser(user)
setUser(initialFormState)
}}
>
<label>Name</label>
<input
type='text'
name='name'
value={user.name}
onChange={handleInputChange}
/>
<label>Username</label>
<input
type='text'
name='username'
value={user.username}
onChange={handleInputChange}
/>
<button>Add New User</button>
</form>
)
}
export default AddUserForm
用户表.js
import React from 'react'
const UserTable = (props) => (
<table>
<thead>
<tr>
<th>Name</th>
<th>Username</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{props.users.length > 0 ? (
props.users.map((user) => (
<tr key={user.id}>
<td>{user.name}</td>
<td>{user.username}</td>
<td>
<button className="button muted-button">Edit</button>
<button className="button muted-button">Delete</button>
</td>
</tr>
))
) : (
<tr>
<td colSpan={3}>No users</td>
</tr>
)}
</tbody>
</table>
)
export default UserTable