javascript - 使用 navLInk 的路由组件反应
问题描述
我正在尝试路由链接并传递数据。问题是当我在新闻组件上收到它时,我传递给它的所有东西都返回一个未定义的..
应用程序.js
<BrowserRouter>
<Route path="/news" component={News} />
</BrowserRouter>
父.js
<NavLink to={{
pathname: '/news',
state : { all : this.props.content} // this is what I want to send and I receive it from another
}}>Todo</NavLink>
新闻.js
export default class News extends React.Component {
constructor(props){
super(props)
}
render(){
const foo = this.props.location.state
console.log(foo) // Cannot read property 'state' of undefined..
console.log(this.props.location) // return undefined
console.log(this.props) // return empty {}
return (
<div className='container'>
<section>
<h1>hello world </h1>
</section>
</div>
)
}
}
解决方案
我不确定parent.js
您的网站结构中的位置。但我已经为你做了一个代码沙盒示例。
我已经在其中定义了一个 defaultProp,parent.js
因此将一些数据传递给了,NavLink
但是您应该能够根据需要重新构建示例。
https://codesandbox.io/s/jp4qr3q3ww?autoresize=1&expanddevtools=1&fontsize=14
app.js (index.js)
import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Route } from "react-router-dom";
import News from "./news.js";
import Parent from "./parent.js";
import "./styles.css";
function App() {
return (
<BrowserRouter>
<Route path="/" component={Parent} />
<Route path="/news" component={News} />
</BrowserRouter>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
父.js
import React from "react";
import { NavLink } from "react-router-dom";
const Parent = props => (
<NavLink
to={{
pathname: "/news",
state: { all: props.content } // this is what I want to send and I receive it from another
}}
>
Todo
</NavLink>
);
Parent.defaultProps = {
content: "some content"
};
export default Parent;
新闻.js
import React from "react";
export default class News extends React.Component {
constructor(props) {
super(props);
}
render() {
const foo = this.props.location.state;
console.log(foo); // Cannot read property 'state' of undefined..
console.log(this.props.location); // return undefined
console.log(this.props); // return empty {}
return (
<div className="container">
<section>
<h1>hello world </h1>
</section>
</div>
);
}
}
推荐阅读
- android - 为什么在 Tablayout 中实现通信接口时不添加片段
- bash - 无法访问 gcloud appengine devserver 的端口
- c - Shift + Enter 与控制台中的 Enter
- ios - 使用正确的导航项返回 ViewController 时 iOS13 崩溃
- c# - 从 C# Task 调用 COM 函数会阻塞调用者线程
- java - 如何结合 DefaultTyping 仅忽略 @JsonSerialize 注释
- android - 当我使用 findfindViewById 定义两个浮动按钮时,为什么我的应用程序会崩溃?
- javascript - 如何通过 id 存储在变量中来渲染组件?
- php - PHP - 上传视频转换 mp4 并上传到 Amazon S3
- ruby - 如何在 Ruby 中编写递归阶乘函数?