gpt4 book ai didi

javascript - 单击按钮时不进行响应路由

转载 作者:行者123 更新时间:2023-12-03 06:17:06 25 4
gpt4 key购买 nike

全新 react ,请注意

我正在做当天的捕获教程,并且正在执行集成路由以在单击按钮时重定向 URL 的步骤。我按照教程中的说明进行了设置:

    var React = require('react');
var ReactDOM = require('react-dom');

var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var History = ReactRouter.History;

var createBrowserHistory = require('history/lib/createBrowserHistory');

var h = require('./helpers');
/*
App
*/

var App = React.createClass({

render : function() {
return (
<div className="catch-of-the-day">
<div className="menu">
<Header tagline="Fresh Seafood Market" />
</div>
<Order/>
<Inventory/>
</div>
)
}
});

/*
Header
<Header/>
*/
var Header = React.createClass({
render : function() {
return (
<header className="top">
<h1>Catch
<span className="ofThe">
<span className="of">of</span>
<span className="the">the</span>
</span>
Day</h1>
<h3 className="tagline"><span>{this.props.tagline}</span></h3>
</header>
);
}
})

/*
Order
<Order/>
*/
var Order = React.createClass({
render : function() {
return (
<p>Order</p>
);
}
})

/*
Inventory
<Inventory/>
*/
var Inventory = React.createClass({
render : function() {
return (
<p>Inventory</p>
);
}
})


/*
StorePicker
This will let us make <StorePicker/>
*/

var StorePicker = React.createClass({
mixins : [History],
goToStore : function(event) {
event.preventDefault();
// get the data from the input
var storeId = this.refs.storeId.value;
this.history.pushState(null, '/store/' + storeId);
},
render : function() {
return (
<form className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter A Store</h2>
<input type="text" ref="storeId" defaultValue={h.getFunName()} required />
<input type="Submit" />
</form>
);
}

});

/*
Not Found
*/

var NotFound = React.createClass({
render : function() {
return <h1>Not Found! 404</h1>
}
});


/*
Routes
*/

var routes = (
<Router history={createBrowserHistory()}>
<Route path="/" component={StorePicker}/>
<Route path="/store/:storeId" component={App}/>
<Route path="*" component={NotFound}/>
</Router>
)

ReactDOM.render(routes, document.querySelector('#main'));

但按下按钮时它不会重定向,我在控制台中收到此错误:

uncaught TypeError: history.push is not a function

尝试摆脱在 link 之后贬值的 mixin @ManoloSantos 给我的

这是我更新的代码,运行时出现相同的错误:

var React = require('react');
var ReactDOM = require('react-dom');

var ReactRouter = require('react-router');
var Route = ReactRouter.Route;
var History = ReactRouter.History;
import { Router, useRouterHistory } from 'react-router'
import { createHashHistory } from 'history'
var createBrowserHistory = require('history/lib/createBrowserHistory');
const appHistory = useRouterHistory(createHashHistory)({ queryKey: false })
var h = require('./helpers');
/*
App
*/

var App = React.createClass({

render : function() {
return (
<div className="catch-of-the-day">
<div className="menu">
<Header tagline="Fresh Seafood Market" />
</div>
<Order/>
<Inventory/>
</div>
)
}
});

/*
Header
<Header/>
*/
var Header = React.createClass({
render : function() {
return (
<header className="top">
<h1>Catch
<span className="ofThe">
<span className="of">of</span>
<span className="the">the</span>
</span>
Day</h1>
<h3 className="tagline"><span>{this.props.tagline}</span></h3>
</header>
);
}
})

/*
Order
<Order/>
*/
var Order = React.createClass({
render : function() {
return (
<p>Order</p>
);
}
})

/*
Inventory
<Inventory/>
*/
var Inventory = React.createClass({
render : function() {
return (
<p>Inventory</p>
);
}
})


/*
StorePicker
This will let us make <StorePicker/>
*/

var StorePicker = React.createClass({
contextTypes: {
router: React.PropTypes.object.isRequired
},
goToStore : function(event) {
event.preventDefault();
// get the data from the input
var storeId = this.refs.storeId.value;
this.context.router.push(null, '/store/' + storeId);
},
render : function() {
return (
<form className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter A Store</h2>
<input type="text" ref="storeId" defaultValue={h.getFunName()} required />
<input type="Submit" />
</form>
);
}

});

/*
Not Found
*/

var NotFound = React.createClass({
render : function() {
return <h1>Not Found! 404</h1>
}
});


/*
Routes
*/

var routes = (
<Router history={appHistory}>
<Route path="/" component={StorePicker}/>
<Route path="/store/:storeId" component={App}/>
<Route path="*" component={NotFound}/>
</Router>
)

ReactDOM.render(routes, document.querySelector('#main'));

这个问题已解决:

var React = require('react');
var ReactDOM = require('react-dom');

var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
import { browserHistory, IndexRoute, useRouterHistory } from 'react-router'
import { createHistory } from 'history'
var h = require('./helpers');


const history = useRouterHistory(createHistory)({
basename: '/'
})


/*
App
*/

var App = React.createClass({

render : function() {
return (
<div className="catch-of-the-day">
<div className="menu">
<Header tagline="Fresh Seafood Market" />
</div>
<Order/>
<Inventory/>
</div>
)
}
});

/*
Header
<Header/>
*/
var Header = React.createClass({
render : function() {
return (
<header className="top">
<h1>Catch
<span className="ofThe">
<span className="of">of</span>
<span className="the">the</span>
</span>
Day</h1>
<h3 className="tagline"><span>{this.props.tagline}</span></h3>
</header>
)
}
})

/*
Order
<Order/>
*/
var Order = React.createClass({
render : function() {
return (
<p>Order</p>
)
}
})

/*
Inventory
<Inventory/>
*/
var Inventory = React.createClass({
render : function() {
return (
<p>Inventory</p>
)
}
})


/*
StorePicker
This will let us make <StorePicker/>
*/

var StorePicker = React.createClass({
goToStore : function(event) {

event.preventDefault();
// get the data from the input
var storeId = this.refs.storeId.value;
browserHistory.push('/store/' + storeId);
},
render : function() {
return (
<form className="store-selector" onSubmit={this.goToStore}>
<h2>Please Enter A Store</h2>
<input type="text" ref="storeId" defaultValue={h.getFunName()} required />
<input type="submit" />
</form>
)
}

});

/*
Not Found
*/

var NotFound = React.createClass({
render : function() {
return <h1>Not Found!</h1>
}
});


/*
Routes
*/

var routes = (
<Router history={browserHistory}>
<Route path="/" component={StorePicker}/>
<Route path="/store/:storeId" component={App}/>
<Route path="*" component={NotFound}/>
</Router>
)

ReactDOM.render(routes, document.querySelector('#main'));

最佳答案

您正在使用已弃用的导航方式。在此page您有一个从 mixin 迁移的升级指南。我将相关部分粘贴到此处。

// v2.0.0
// You have a couple options:
// 1) Use context.router (especially if on the server)
const DeepComponent = React.createClass({
contextTypes: {
router: React.PropTypes.object.isRequired
},
handleSubmit() {
this.context.router.push(...)
}
}

// 2) Use the singleton history
import { browserHistory } from 'react-router'
const DeepComponent = React.createClass({
handleSubmit() {
browserHistory.push(...)
}
}

编辑:看来 from v2.4有一个 HoC 可以简化从上下文中获取路由器的过程。

关于javascript - 单击按钮时不进行响应路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39047447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com