[英]How to change state in one page from a link click from another page?
当用户单击将他们带到该页面的链接时,如何更改其他页面中的 state?
例如
主页
<Link href="/about">
<button>click to go to about page</button>
</Link>
用户点击主页中的链接,然后当用户到达关于页面时,由于用户点击了主页中的链接,关于页面中的 state 由false变为true 。
关于页面
const [questionone, setQuestionone] = useState(false)
该框架是Next.js。
您可以像这样创建结构代码:
您必须像我在下面的App.js
中创建的那样创建Route
:
App.js
import { Switch, Route } from "react-router-dom";
import Homepage from "./Homepage";
import About from "./About";
const App = () => {
return (
<Switch>
<Route exact path="/" component={Homepage} />
<Route path="/about" component={About} />
</Switch>
);
};
export default App;
然后你像下面这样创建Homepage.jsx
组件,在这种情况下你不需要导入Link
并使用Link
来更改路由器的路径,在这种情况下我使用useHistory
来更改路由器的路径并发送state
在这种情况下路由路径的组件/about
组件是About.jsx
:
Homepage.jsx
import { useHistory } from "react-router-dom";
const Homepage = () => {
const history = useHistory();
return (
<div>
<button
onClick={() => {
history.push({
pathname: "/about",
state: { clickedFromHome: true }
});
}}
>
click to go to about page
</button>
</div>
);
};
export default Homepage;
在About.jsx
,您可以从Homepage
使用 state 来更改About
组件中的state
questionone
。 下面的示例代码:
About.jsx
import { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
const About = () => {
const [questionone, setQuestionone] = useState(false);
const location = useLocation();
useEffect(() => {
if (location.state?.clickedFromHome) {
setQuestionone(true);
}
}, [location.state?.clickedFromHome]);
console.log(location.state?.clickedFromHome);
return <div>About{questionone.toString()}</div>;
};
export default About;
现在 state 在About.jsx
中发生了变化,如果你点击主页上的按钮将路径更改为“/about”
在 React 中我们需要在 Link 标签中使用 to attribute 而不是 href
你的标签应该是这样的。
<Link to="/about">
<button>click to go to about page</button>
</Link>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.