实施路由器以在 React.js 中更改页面
implementing Router to change pages in React.js
我正在制作一个 react.js 购物清单应用程序,我有它,因此您可以输入值并将它们打印到 table 中。这是我第一次使用 React,我想在单独的页面上显示我的 table 我知道 ROUTER 方法,但在实现它时遇到问题。
这是我的代码
注意:我还没有添加任何东西来在页面之间导航,但我希望打印按钮从 App.js 导航到 Details.js
import NavBar from "./components/navbar";
import "./App.css";
import Counters from "./components/counters";
import Details from "./Details";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
class App extends Component {
state = {
counters: [
//example of objects in array
/*{ id: 1, value: 2, text: "hi" },*/
],
};
constructor(props) {
super(props);
console.log("app- constructor");
}
componentDidMount() {
console.log("app- mouneted");
}
handleIncrement = (counter) => {
const counters = [...this.state.counters];
const index = counters.indexOf(counter);
counters[index] = { ...counter };
counters[index].value++;
this.setState({ counters });
};
handleDecrement = (counter) => {
const counters = [...this.state.counters];
const index = counters.indexOf(counter);
counters[index] = { ...counter };
counters[index].value--;
this.setState({ counters });
};
handleReset = () => {
const counters = this.state.counters.map((c) => {
c.value = 0;
return c;
});
this.setState({ counters });
};
handleName = () => {
var name = prompt("name");
return name;
};
handleCreate = () => {
const create = this.state.counters.length + 1;
const counter = this.state.counters.push({
id: create,
value: 0,
text: this.handleName(),
});
this.setState({ counter });
};
handleDelete = (counterId) => {
const counters = this.state.counters.filter((c) => c.id !== counterId);
this.setState({ counters });
};
handleInfo = () => {
let x;
//loops through all tems and adds the to the list
for (x = 0; x <= this.state.counters.length; x++) {
//breaks loop if x is == to counters array
if (this.state.counters.length == x) {
break;
}
const info = this.state.counters[x]["text"];
const quantity = this.state.counters[x]["value"];
console.log(info, quantity);
//creates rows based on input
var table = document.getElementById("myList");
var row = table.insertRow(1);
var itemCell = row.insertCell(0);
var quantityCell = row.insertCell(1);
itemCell.innerHTML = info;
quantityCell.innerHTML = quantity;
}
//calls the print function
return <a href="http://localhost:3000/Details"></a>;
};
render() {
console.log("rendered");
return (
<React.Fragment>
<NavBar
totalCounters={this.state.counters.filter((c) => c.value > 0).length}
/>
<main className="container">
<Counters
counters={this.state.counters}
onReset={this.handleReset}
onCreate={this.handleCreate}
onIncrement={this.handleIncrement}
onDecrement={this.handleDecrement}
onDelete={this.handleDelete}
onInfo={this.handleInfo}
/>
</main>
<div>
<table bordered id="myList">
<tr>
<th>Items</th>
<th>Quantity</th>
</tr>
</table>
</div>
<style>
{`
th{
border: 2px solid black;
padding: 2px;
min-width: 100px;
font-size: 22px;
font-style: bold;
}
td{
border: 2px solid black;
padding: 2px;
min-width: 100px;
font-size: 18px;
}
`}
</style>
</React.Fragment>
);
}
}
export default App;
这就是我的应用程序的样子
但我希望 table 在详细信息页面上
任何帮助表示赞赏
Router
不是方法,而是包装应用程序的组件。在 Router
内部,Switch
组件包装了 Route
的几个实例,这些实例又包装了在命中该路由时要呈现的组件。最后 Link
组件用于构建指向各种 Route
实例的链接。整体看起来像这样:
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
<Router>
<Switch>
<Route exact path="/">
<div>
...insert home page here...
<Link to="/details">Click here to go to details page!</Link>
</div>
</Route>
<Route path="/details">
...details page/component here...
</Route>
</Switch>
</Router>
有关详细信息,请参阅 React Router Tutorial。
我正在制作一个 react.js 购物清单应用程序,我有它,因此您可以输入值并将它们打印到 table 中。这是我第一次使用 React,我想在单独的页面上显示我的 table 我知道 ROUTER 方法,但在实现它时遇到问题。
这是我的代码 注意:我还没有添加任何东西来在页面之间导航,但我希望打印按钮从 App.js 导航到 Details.js
import NavBar from "./components/navbar";
import "./App.css";
import Counters from "./components/counters";
import Details from "./Details";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
class App extends Component {
state = {
counters: [
//example of objects in array
/*{ id: 1, value: 2, text: "hi" },*/
],
};
constructor(props) {
super(props);
console.log("app- constructor");
}
componentDidMount() {
console.log("app- mouneted");
}
handleIncrement = (counter) => {
const counters = [...this.state.counters];
const index = counters.indexOf(counter);
counters[index] = { ...counter };
counters[index].value++;
this.setState({ counters });
};
handleDecrement = (counter) => {
const counters = [...this.state.counters];
const index = counters.indexOf(counter);
counters[index] = { ...counter };
counters[index].value--;
this.setState({ counters });
};
handleReset = () => {
const counters = this.state.counters.map((c) => {
c.value = 0;
return c;
});
this.setState({ counters });
};
handleName = () => {
var name = prompt("name");
return name;
};
handleCreate = () => {
const create = this.state.counters.length + 1;
const counter = this.state.counters.push({
id: create,
value: 0,
text: this.handleName(),
});
this.setState({ counter });
};
handleDelete = (counterId) => {
const counters = this.state.counters.filter((c) => c.id !== counterId);
this.setState({ counters });
};
handleInfo = () => {
let x;
//loops through all tems and adds the to the list
for (x = 0; x <= this.state.counters.length; x++) {
//breaks loop if x is == to counters array
if (this.state.counters.length == x) {
break;
}
const info = this.state.counters[x]["text"];
const quantity = this.state.counters[x]["value"];
console.log(info, quantity);
//creates rows based on input
var table = document.getElementById("myList");
var row = table.insertRow(1);
var itemCell = row.insertCell(0);
var quantityCell = row.insertCell(1);
itemCell.innerHTML = info;
quantityCell.innerHTML = quantity;
}
//calls the print function
return <a href="http://localhost:3000/Details"></a>;
};
render() {
console.log("rendered");
return (
<React.Fragment>
<NavBar
totalCounters={this.state.counters.filter((c) => c.value > 0).length}
/>
<main className="container">
<Counters
counters={this.state.counters}
onReset={this.handleReset}
onCreate={this.handleCreate}
onIncrement={this.handleIncrement}
onDecrement={this.handleDecrement}
onDelete={this.handleDelete}
onInfo={this.handleInfo}
/>
</main>
<div>
<table bordered id="myList">
<tr>
<th>Items</th>
<th>Quantity</th>
</tr>
</table>
</div>
<style>
{`
th{
border: 2px solid black;
padding: 2px;
min-width: 100px;
font-size: 22px;
font-style: bold;
}
td{
border: 2px solid black;
padding: 2px;
min-width: 100px;
font-size: 18px;
}
`}
</style>
</React.Fragment>
);
}
}
export default App;
这就是我的应用程序的样子 但我希望 table 在详细信息页面上 任何帮助表示赞赏
Router
不是方法,而是包装应用程序的组件。在 Router
内部,Switch
组件包装了 Route
的几个实例,这些实例又包装了在命中该路由时要呈现的组件。最后 Link
组件用于构建指向各种 Route
实例的链接。整体看起来像这样:
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
<Router>
<Switch>
<Route exact path="/">
<div>
...insert home page here...
<Link to="/details">Click here to go to details page!</Link>
</div>
</Route>
<Route path="/details">
...details page/component here...
</Route>
</Switch>
</Router>
有关详细信息,请参阅 React Router Tutorial。