反应路由器:链接和路由不传递状态到组件
我正在用React、Redux和React路由器构建一个在线购物应用程序。在主页上,显示所有项目。我希望用户能够点击一个图像,并被带到一个页面,其中包含该项目的项目详细信息。
下面是我如何做到这一点的:
这看起来很简单,我在网上看到了很多关于这一点的讨论。以下是我已经尝试过的一些方法:
单击React Router中的链接后显示项目详细信息
如何单击以查看详细组件
通过React-路由器v4传递值
Tyler McGinnis-传递道具以反应路由器的链接组件
中-如何传递道具以反应路线组件
我能够让URL更改为对应于项目的ID,但我不能让项目组件以正确的信息呈现,有时我会根据我使用的方法获得错误。我在我tem.js的div中硬编码了单词“项目组件”,当我点击主页上的图像时,它会呈现出来。否则,什么都不会呈现,否则我会收到以下两个打字错误:
pp.js:
<Route path="/products" render={(props) => (<Item {...props} id={this.props.location.id} />) }/>
export default withRouter(App);
单击主页上的图像时,我收到以下错误:
TypeError:无法读取未定义的属性“props”
当上面的“render”代码从中删除并替换为“component={Item}”时,我从Item.js接收到这个错误:TypeError:无法读取未定义的属性“location”
以下是我的其他代码片段:
Item.js:
class Item extends React.Component {
constructor() {
super();
this.state = {
item: this.props.location.state
}
}
render() {
let item = this.state.item;
return (
<div className="item" key={item.id}>
<div className="item-image">
<img src={item.img} alt={item.title} />
</div>
<div className="card-component">
<span className="item-title">{item.title}</span>
<p className="item-price"><b>${item.price}</b></p>
<p className="item-desc">{item.desc}</p>
</div>
</div>
);
}
}
Home.js(其中显示所有项目),项目详情页链接如下:
<Link to =
{{ pathname: `/products/${item.category}`,
search: `?id=${item.id}`,
state: {id: `${item.id}`} }}
component={ Item }>
<img src={item.img} alt={item.title} />
</Link>
更新
我已经包装了
我尝试在构造函数中将Item.js状态设置为
null
,然后使用componentDidMount()
中的{Item:this.props.location.state}
调用this.setState
。执行此操作时,我收到以下错误:
TypeError:无法读取null的属性“img”
另外,如果我离开
render={(props)=
TypeError:无法读取未定义的属性“props”
如果我更改
更新:包括App.js和Routes.js代码
一个pp.js
import React from 'react';
import {
BrowserRouter as Router,
withRouter,
Switch
} from 'react-router-dom';
import './App.css';
import Navbar from './components/Navbar';
import Footer from './components/footer/Footer';
import { Routes } from './constants/Routes';
class App extends React.Component {
render() {
return (
<Router>
<div className="App">
<Navbar />
<Switch>
{ Routes }
</Switch>
<Footer />
</div>
</Router>
);
}
}
export default withRouter(App);
Routes.js
import React from 'react';
import { Route } from 'react-router-dom';
import Home from '../components/Home';
import Item from '../components/shopping/Item';
import Cart from '../components/cart/Cart';
import OrderStatus from '../components/footer/OrderStatus';
import GiftCards from '../components/footer/GiftCards';
import ReturnsExchanges from '../components/footer/Returns-Exchanges';
import Contact from '../components/footer/Contact';
export const Routes = <div>
<Route exact path="/" component={ Home } />
<Route path="/products" component={ Item }/>
<Route path="/cart" component={ Cart } />
<Route path="/order-status" component={ OrderStatus } />
<Route path="/gift-cards" component={ GiftCards } />
<Route path="/returns-exchanges" component={ ReturnsExchanges } />
<Route path="/contact" component={ Contact } />
</div>
要访问任何组件中的history
对象属性,您需要使用withRouter
包装该组件。从react router dom
导入withRouter
,然后像这样包装App
组件:
export default withRouter(App);
更多关于路由器的信息。
另外,在index.js
中,确保您的
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>
, document.getElementById('root'));
编辑:
TypeError:无法读取未定义的属性“props”
用以下代码替换您的
应该在任何其他语句之前,否则props将在构造函数中未定义。构造函数
。当实现React Component的构造函数时,超级(props)
constructor(props){
super(props);
this.state = {
item: this.props.location.state
}
}
错误:TypeError:无法读取null的属性“img”
原因:状态的初始值不应该为null
。在这种情况下,您可以传递空对象{}
,但不能传递null。您试图访问img
,title
,price
和desc
中的Item.js
,但仅在的
state
中传递id
<Link to =
{{ pathname: `/products/${item.category}`,
search: `?id=${item.id}`,
state: {id: `${item.id}`} //pass img, title, desc, price etc as well
}}
component={ Item }>
<img src={item.img} alt={item.title} />
</Link>
我需要通过使用路由器的组件道具。这是我的代码: 如您所见,我验证了我要传递给登录组件的道具。 当我记录道具时,未经验证的道具不存在。我做错了什么?我怎样才能正确地通过道具?我跟踪了文档和其他讨论。据我所知,这应该是可行的。react router和react router dom的版本为4.0.0
所以,我开始学习React与Redux和react-router。一个. net的大麻烦 我想使用对象查找给定url中的道具,因此可以执行以下操作: 我定义了这样一条路线: 组件正在正确的url上呈现,但我无法获得任何道具。 所有这些逻辑都不是在应用根中发生的,而是在这个渲染的组件中发生的: 我需要遵循哪些关键因素,这样才能起作用?我正在使用最新的react路由器v4。谢谢
我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误
I my app.js我已将路线定义为: 在我的中,我有一个链接: 但问题是,当我在aboue path中设置prop'确切={true}时,找不到这个路径 当我没有在上面的路径中设置exact={true}时,在同一页面上呈现路径组件及其下方的路径组件
我在一个组件中有一个按钮,单击我想转到另一个组件并将状态传递给该组件。 是这样的: 但它不起作用。单击“我去添加新问题url”,但组件AddNewQuestionPage不会呈现。若我不把路线放在AddQuestions组件中,而是放在应用程序组件中,它就可以工作。它是整个应用程序的主要组件,使用Switch,还设置了其他路由。 但是,如果状态问题是从应用程序组件呈现的,我不知道如何将其传递给Ad
所以我面临的问题是,当我点击Hover Books组件中的链接进入一个新页面时,我可以在其中呈现图书状态,但当我按下它时,什么也没有发生。我知道错误可能在哪里(路由)。如果你能帮我修好它,我将不胜感激。谢谢