服务器端
您可能需要一个函数调用来执行特定路由的 onEnter 调度,这将填充您呈现组件所需的应用程序状态。
路线看起来像这样:
<Route component={ProductPage} path="/product/:Id" onEnter={requireProductData} />
requireProductData 将是 main.js 中的一个函数,如下所示:
function requireProductData(nextState, replace, callback) {
const { params } = nextState
var idNum = parseInt(params.id.toString().split("-")[0])
const currentState = store.getState()
if (idNum > 0) {
store.dispatch(ProductActionCreators.productInfo({ id: idNum })).then((event) => {
callback()
}, (error) => {
callback()
})
} else {
callback()
}
}
这将执行您的操作创建者调用,然后您的减速器将处理应用程序状态。然后你可以从那个 url 渲染你的组件。
客户端
是的,你做一个 onClick 处理程序是对的。以下是单击按钮导致 API 调用的示例:
class SubscribeUserDialog extends Component {
subscribeUser(privacy) {
const { dispatch, readingPlan, auth } = this.props
if (!auth.isLoggedIn) window.location.replace(`/sign-in`)
// if user isn't subscribed, then subscribe!
if (!readingPlan.subscription_id) {
dispatch(ActionCreators.readingplanSubscribeUser({ id: readingPlan.id , private: privacy }, auth.isLoggedIn)).then(() => {
// redirect to plan
this.goToPlan()
})
} else {
// user already subscribed
this.goToPlan()
}
}
render() {
return (
<div className='plan-privacy-buttons text-center'>
<p className='detail-text'><FormattedMessage id="plans.privacy.visible to friends?" /></p>
<div className='yes-no-buttons'>
<a className='yes solid-button green' onClick={this.subscribeUser.bind(this, false)}><FormattedMessage id="ui.yes button"/></a>
<a className='no solid-button gray' onClick={this.subscribeUser.bind(this, true)}><FormattedMessage id="ui.no button" /></a>
</div>
</div>
)
}
}
export default SubscribeUserDialog
在您的情况下,您会将 onClick 附加到您的链接。
这对你有帮助吗?