reactjs - 类型错误:props.users 未定义
问题描述
我正在尝试使用 BrowserRoute 将用户作为道具发送到另一个页面,即 table.js。但它显示“props.users 未定义”并且它还说“addUser”被分配了一个值但从未使用过
//app.js
import React, { useState } from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import "./App.css";
import Navbar from "./Components/Layout/Navbar";
import Table from "./Components/pages/Table";
import Home from "./Components/pages/Home";
import About from "./Components/pages/About";
const App = () => {
const usersData = [
{ id: 1, name: "John", username: "floppydiskette" },
{ id: 2, name: "Brooke", username: "siliconeidolon" },
{ id: 3, name: "Sia", username: "benisphere" }
];
const [users, setUsers] = useState(usersData);
const addUser = user => {
user.id = users.length + 1;
setUsers([...users, user]);
};
return (
<Router>
<Navbar />
<div className="container">
<Switch>
<Route exact path="/" render={addUser => <Home {...addUser} />} />
<Route exact path="/Table" render={users => <Table {...users} />} />
<Route exact path="/About" component={About} />
</Switch>
</div>
</Router>
);
};
export default App;
//table.js
import React from "react";
const Table = props => (
<table className="v_artist ">
<thead>
<tr>
<th>Artist</th>
<th>Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{props.users.length > 0 ? (
props.users.map(user => {
return (
<tr key={user.id}>
<td>{user.name}</td>
<td>{user.data}</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 Table;
表格需要查看数据。当我在表格中添加数据时,应该在表格中查看数据。基本上,我正在尝试进行 CRUD 操作,每个操作都在不同的页面中。
解决方案
render={users => <Table {...users} />}
此users
变量正在遮蔽由const [users, setUsers] = useState(usersData);
. 因此,您所在州的用户根本不会被传递到表中,而传递的只是来自路由器的道具。我会将其重命名为更具代表性的名称,然后还添加代码以传递用户:
render={routeProps => <Table {...routeProps} users={users} />}
至于 addUser,您遇到了同样的问题:您正在隐藏您关心的变量,因此不使用它。
render={routeProps => <Home {...routeProps} addUser={addUser}/>}
推荐阅读
- haskell - do-notation/enumFromTo 中的模式匹配会减慢 Haskell 代码的速度吗?
- javascript - 在 JavaScript 中返回修改后的对象(类似于镜头)
- html - 移动视图上不需要的空间
- r - 有人可以解释 DT::dataTableProxy 是如何工作的吗?
- python - 机器人浏览器。如何填写没有名称属性的输入
- c# - ASP.NET 将 UserControl 转换为 Razor 部分视图:处理属性
- google-cloud-platform - 如何以分钟的精度从 BigQuery 绘制时间序列?
- vb.net - 在计算器的单个文本框中显示大数的逗号
- stripe-payments - 使用新的 Stripe Checkout 测试版时如何发送收据
- javascript - 在 BlueprintJs DateInput 上添加“small”属性或 .bp3-small