act-route-dom v6使用Navigate将值传递给另一个组件 [英] react-router-dom v6 useNavigate passing value to another component
本文介绍了act-route-dom v6使用Navigate将值传递给另一个组件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
REACTION-ROUTER-DOM的版本是V6,我在使用导航将值传递给另一个组件时遇到问题。
我希望将所选行传递到另一个名为Report的页面。但是,我不确定我是否为navigate
方法使用了正确的语法,并且我不知道如何在报表组件中获取该状态。
物料-界面表:我正在尝试使用onClick
参数中的redirectToReport(rowData)
。
function TableRows(props){
return (
<MaterialTable
title="Leads"
columns={[
...
]}
data = {props.leads}
options={{
selection: true,
filtering: true,
sorting: true
}}
actions = {[{
position: "toolbarOnSelect",
tooltip: 'Generate a report based on selected leads.',
icon: 'addchart',
onClick: (event, rowData) => {
console.log("Row Data: " , rowData)
props.redirect(rowData)
}
}]}
/>
)}
引导表组件
export default function LeadTable(props) {
let navigate = useNavigate();
const [leads, setLeads] = useState([]);
const [loading, setLoading] = useState(true);
async function fetchUrl(url) {
const response = await fetch(url);
const json = await response.json();
setLeads(json[0]);
setLoading(false);
}
useEffect(() => {
fetchUrl("http://localhost:5000/api/leads");
}, []);
function redirectToReport(rowData) {
navigate('/app/report', { state: rowData }); // ??? I'm not sure if this is the right way
}
return(
<div>
<TableRows leads={leads} redirect={redirectToReport}></TableRows>
</div>
)}
报表组件
export default function ReportPage(state) {
return (
<div>
{ console.log(state) // This doesn't show anything. How to use the state that were passed from Table component here?}
<div className = "Top3">
<h3>Top 3 Leads</h3>
<ReportTop3 leads={[]} />
</div>
</div>
);}
推荐答案
您的navigate('/app/report', { state: rowData });
在我看来是正确的。
如果需要状态,请使用
navigate('success', { state })
。
您的ReportPage
需要在执行推送的组件所在的同一Router
下呈现。
useLocation
挂钩完成。
function ReportPage(props) {
const { state } = useLocation();
console.log(state);
return (
<div>
<div className = "Top3">
<h3>Top 3 Leads</h3>
<ReportTop3 leads={[]} />
</div>
</div>
);
}
如果组件不能使用Reaction挂钩,那么您仍然可以通过自定义的withRouter
更高级别的组件访问路由状态。以下是一个简单的withRouter
hoc作为道具传递location
的示例。
const withRouter = WrappedComponent => props => {
const location = useLocation();
return <WrappedComponent {...props} location={location} />;
};
然后像在RRDv6之前的版本中一样,通过道具访问。
function ReportPage(props) {
console.log(props.location.state);
return (
<div>
<div className = "Top3">
<h3>Top 3 Leads</h3>
<ReportTop3 leads={[]} />
</div>
</div>
);
}
这篇关于act-route-dom v6使用Navigate将值传递给另一个组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文