ish*_*n19 6 javascript reactjs react-router-dom
React 新手;我已经使用 react-router 编写了一个简单的页面,点击链接应该呈现相应的组件,但即使点击更改了 URL,组件也不会被呈现。无论单击什么链接,都会显示家乡路线。关于我在这里可能做错的任何建议?
这是我的 App.js
import { BrowserRouter as Router, Link, Switch, Route } from "react-router-dom";
import ReactDOM from "react-dom";
const Menu = () => {
const padding = {
paddingRight: 5,
};
return (
<div>
<Link style={padding} to="/">
anecdotes
</Link>
<Link style={padding} to="/create">
create new
</Link>
<Link style={padding} to="/about">
about
</Link>
</div>
);
};
const AnecdoteList = ({ anecdotes }) => (
<div>
<h2>Anecdotes</h2>
<ul>
{anecdotes.map((anecdote) => (
<li key={anecdote.id}>{anecdote.content}</li>
))}
</ul>
</div>
);
const About = () => (
<div>
<h2>About anecdote app</h2>
<p>According to Wikipedia:</p>
<em>
An anecdote is a brief, revealing account of an individual person or an
incident. Occasionally humorous, anecdotes differ from jokes because their
primary purpose is not simply to provoke laughter but to reveal a truth
more general than the brief tale itself, such as to characterize a person
by delineating a specific quirk or trait, to communicate an abstract idea
about a person, place, or thing through the concrete details of a short
narrative. An anecdote is "a story with a point."
</em>
<p>
Software engineering is full of excellent anecdotes, at this app you can
find the best and add more.
</p>
</div>
);
const Footer = () => (
<div>
Anecdote app for{" "}
<a href="https://courses.helsinki.fi/fi/tkt21009">
Full Stack -websovelluskehitys
</a>
. See{" "}
<a href="https://github.com/fullstack-hy2020/routed-anecdotes/blob/master/src/App.js">
https://github.com/fullstack-hy2019/routed-anecdotes/blob/master/src/App.js
</a>{" "}
for the source code.
</div>
);
const CreateNew = (props) => {
const [content, setContent] = useState("");
const [author, setAuthor] = useState("");
const [info, setInfo] = useState("");
const handleSubmit = (e) => {
e.preventDefault();
props.addNew({
content,
author,
info,
votes: 0,
});
};
return (
<div>
<h2>create a new anecdote</h2>
<form onSubmit={handleSubmit}>
<div>
content
<input
name="content"
value={content}
onChange={(e) => setContent(e.target.value)}
/>
</div>
<div>
author
<input
name="author"
value={author}
onChange={(e) => setAuthor(e.target.value)}
/>
</div>
<div>
url for more info
<input
name="info"
value={info}
onChange={(e) => setInfo(e.target.value)}
/>
</div>
<button>create</button>
</form>
</div>
);
};
const App = () => {
const [anecdotes, setAnecdotes] = useState([
{
content: "If it hurts, do it more often",
author: "Jez Humble",
info: "https://martinfowler.com/bliki/FrequencyReducesDifficulty.html",
votes: 0,
id: "1",
},
{
content: "Premature optimization is the root of all evil",
author: "Donald Knuth",
info: "http://wiki.c2.com/?PrematureOptimization",
votes: 0,
id: "2",
},
]);
const [notification, setNotification] = useState("");
const addNew = (anecdote) => {
anecdote.id = (Math.random() * 10000).toFixed(0);
setAnecdotes(anecdotes.concat(anecdote));
};
const anecdoteById = (id) => anecdotes.find((a) => a.id === id);
const vote = (id) => {
const anecdote = anecdoteById(id);
const voted = {
...anecdote,
votes: anecdote.votes + 1,
};
setAnecdotes(anecdotes.map((a) => (a.id === id ? voted : a)));
};
return (
<div>
<h1>Software anecdotes</h1>
<Router>
<Menu />
<Switch>
<Route path="/">
<AnecdoteList anecdotes={anecdotes} />
</Route>
<Route path="/about">
<About />
</Route>
<Route path="/create">
<CreateNew addNew={addNew} />
</Route>
</Switch>
</Router>
<Footer />
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
Run Code Online (Sandbox Code Playgroud)
CodeSandBox 链接:https ://codesandbox.io/s/fancy-glitter-2ri6k ? file =/ src/App.js:0-4355
在此先感谢您的时间!