Reactjs React路由器中相似路由间的切换
我有这样的路线:Reactjs React路由器中相似路由间的切换,reactjs,flux,react-router,Reactjs,Flux,React Router,我有这样的路线: <Route name="itemDetails" handler={ItemDetails} path="/item/:itemId"/> 下面是itemDetails代码: var React = require('react'); var Store = require('../../stores/app-store'); var Preloader = require('../template/app-preloader'); var NewEstateI
<Route name="itemDetails" handler={ItemDetails} path="/item/:itemId"/>
下面是itemDetails代码:
var React = require('react');
var Store = require('../../stores/app-store');
var Preloader = require('../template/app-preloader');
var NewEstateItem = require('./app-newestateitem');
var NewEstateRelated = require('./app-newestaterelated');
var NewEstateDetails = React.createClass({
getInitialState: function() {
return { item: null };
},
componentWillMount: function() {
itemId = this.props.params.itemId;
console.log('ItemId:', itemId);
Store.getNewEstateById(itemId,this._getNewEstateDetails);
},
render: function() {
var item = this.state.item;
if(!item) {
return (<Preloader />);
}
return (
<div className="row">
<div className="container flex-container">
<div className="col s12 m12 l8">
<div className="col s12">
<h4>{item.Name}</h4>
</div>
<div className="col l4 hide-on-med-and-down margintop">
<h5 className="center">Related items</h5>
<div className="col s12">
<NewEstateRelated Price={item.Price}/>
</div>
</div>
</div>
</div>
);
},
_getNewEstateDetails: function (item) {
this.setState({item:item});
}
});
module.exports = NewEstateDetails;
我认为这就是问题所在: 您的路由器需要
:id
:
<Route name="itemDetails" handler={ItemDetails} path="/item/:id"/>
我非常确定它应该匹配并且是:
<Link to="ItemDetails" params={{id: item.objectId, CustomID: item.CustomID}} className="btn</Link>
如果您发布ItemDetails中的代码将有所帮助。你在那里的渲染方法中对router.getCurrentParams().id做了什么吗?关于这个:router.getCurrentParams().id我没有。我应该如何处理它?可能只是在第一次渲染时调用componentDidMount,这是唯一一个使用所选项更新状态的地方-看起来像router.getCurrentParams().itemId与此相同。props.params.itemId如何添加侦听器,哪一个会触发路径更改的方法?对不起,我的错误-在这个描述中输入错误。我已经更正了你确定商店里的数据不同吗?我能想到的唯一一件事是,您的存储实际上返回了相同的数据,因此UI不会更新。选中:存储中的数据没有什么不同。为什么?我不知道为什么你的商店没有返回不同的内容…如果没有看到所有的代码,我帮不了你。看起来这个问题是无效的,因为路线确实有效,不是你的商店有效!张贴你的商店和其他相关代码,看看它是否有助于破译问题。
<Link to="ItemDetails" params={{itemId: item.objectId, CustomID: item.CustomID}} className="btn</Link>
var getNewEstateData = {
getNewEstateById: function(objectId, callback) {
console.log('store.objectId', objectId);
function NewEstateData() {};
var item = Backendless.Persistence.of( NewEstateData ).findById( objectId );
console.log("store.getNewEstateById", item);
callback(item);
},
getAllNewEstate: function(callback) {
function NewEstateData() {};
var items = Backendless.Persistence.of( NewEstateData ).find().data;
callback(items)
},
getRelatedNewEstateItems: function (priceBottom, priceTop, callback) {
function NewEstateData() {};
var items = Backendless.Persistence.of( NewEstateData );
var dataQuery = {
condition: "Price >= "+priceBottom
}
var query = items.find( dataQuery ).data
var output = query.slice(0,3)
console.log('relatedItems', query);
callback(output)
}
};
module.exports = getNewEstateData;
<Route name="itemDetails" handler={ItemDetails} path="/item/:id"/>
<Link to="ItemDetails" params={{itemId: item.objectId, CustomID: item.CustomID}} className="btn</Link>
<Link to="ItemDetails" params={{id: item.objectId, CustomID: item.CustomID}} className="btn</Link>
// given a route config like this
<Route name="user" path="/users/:userId"/>
// create a link with this
<Link to="user" params={{userId: "123"}}/>
// though, if your user properties match up to the dynamic segements:
<Link to="user" params={user}/>