【发布时间】:2019-08-03 19:40:42
【问题描述】:
问题是...当您加载“/”主组件加载时,当您单击主题时,我正在从 Link 传递我的数据,这在 h1 标记中显示,所以工作正常....(已编辑) 问题是一旦您单击主题并单击后退按钮,该按钮将转到主页并再次单击前进。我可以看到从 Link 传递的数据不存在?
我希望数据即使在我返回并再次前进后也存在
在这里创建了一个小的工作用例https://codesandbox.io/s/m4lvm46myx
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Route, Link } from "react-router-dom";
const topics = [
{
name: "Functional Programming",
id: "functional-programming",
description:
"In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.",
resources: [
{
name: "Imperative vs Declarative programming",
id: "imperative-declarative",
description:
"A guide to understanding the difference between Imperative and Declarative programming.",
url: "https://tylermcginnis.com/imperative-vs-declarative-programming/"
},
{
name:
"Building User Interfaces with Pure Functions and Function Composition",
id: "fn-composition",
description:
"A guide to building UI with pure functions and function composition in React",
url:
"https://tylermcginnis.com/building-user-interfaces-with-pure-functions-and-function-composition-in-react-js/"
}
]
}
];
const Resources = ({ match }) => {
return <div>Resources</div>;
};
const Home = () => {
return (
<div>
<h1>HOME </h1>
</div>
);
};
const Topic = ({ match }) => {
console.log("match", match);
const topic = topics.find(({ id }) => id === match.params.topicId);
return (
<div>
<h1>{topic.name}</h1>
<ul>
{topic.resources.map(sub => (
<li key={sub.id}>
<Link to={`/topics/${match.params.topicId}/${sub.id}`}>
{sub.name}
</Link>
</li>
))}
</ul>
<hr />
<Route path={`/topics/:topicId/:subId`} component={Resources} />
</div>
);
};
const Topics = props => {
console.log("Topics location props", props.location.name);
return (
<div>
<h1>Link data passed : {props.location.name}</h1>
<h1>Topics </h1>
<ul>
{topics.map(({ name, id }) => (
<li key={id}>
<Link to={`/topics/${id}`}> {name}</Link>
</li>
))}
</ul>
<hr />
<Route path={`/topics/:topicId`} component={Topic} />
</div>
);
};
class App extends Component {
render() {
return (
<BrowserRouter>
<div className="App">
<h1>Nested Routers Learnings </h1>
<ul>
<li>
{" "}
<Link to="/">Home</Link>
</li>
<li>
{" "}
<Link
to={{
pathname: "/topics",
name: "Nischith"
}}
>
Topics
</Link>
</li>
</ul>
<hr />
<Route exact path="/" component={Home} />
<Route path="/topics" component={Topics} />
</div>
</BrowserRouter>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
【问题讨论】: