我試圖讓路由器v4從store
中的某個操作導航,而沒有明確地將history
prop傳遞給在某些邏輯運行後需要導航的每個存儲操作。React Router v4從MobX商店操作導航?
我尋找的是這樣的工作:
import { NavigationStore } from 'navigation-store';
class ContactStore {
@action contactForm(name, message){
// Some logic runs here
// Then navigate back or success
// Go back
NavigationStore.goBack();
// Or Navigate to Route
NavigationStore.push('/success');
}
}
當然NavigationStore
是不存在的(我不知道它要放什麼東西從路由器做出反應,使其工作),但我我正在尋找導入一個mobx導航商店,我可以用它來導航應用程序(組件或商店)中的任何地方使用相同的API react-router
如何做到這一點?
更新:
RR4沒有給大家一個辦法,從商店的行爲進行導航。我正在嘗試導航,就像上面使用RR4的一樣。我只需要知道什麼navigation-store
應包含這樣我就可以:
import { NavigationStore } from 'navigation-store';
任何地方(分量/店),還歷史認識,要能夠從任何地方進行導航。NavigationStore.RR4Method(RR4MethodParam?);
其中RR4Method
會是什麼樣子推,GoBack的,等可用RR4導航選項。(這是導航應該如何發生的)
更新2:
所以URL更新現在從NavigationStore.push('/success');
但不會發生網頁刷新。
這裏是navigation-store.js
import { observable, action } from 'mobx'
import autobind from 'autobind-decorator'
import createBrowserHistory from 'history/createBrowserHistory'
class NavigationStore {
@observable location = null;
history = createBrowserHistory();
@autobind push(location) {
this.history.push(location);
}
@autobind replace(location) {
this.history.replace(location);
}
@autobind go(n) {
this.history.go(n);
}
@autobind goBack() {
this.history.goBack();
}
@autobind goForward() {
this.history.goForward();
}
}
const navigationStore = new NavigationStore();
export default navigationStore;
這裏是app.js
import React from 'react'
import { Provider } from 'mobx-react'
import { BrowserRouter as Router, Route } from 'react-router-dom'
import Contact from 'screens/Contact'
import Success from 'screens/Success'
export default class App extends React.Component {
render() {
return (
<div>
<Provider>
<Router>
<div>
<Route path='/contact' component={Contact} />
<Route path='/success' component={Success} />
</div>
</Router>
</Provider>
</div>
);
}
}
一旦網址更改爲/success
,什麼都不會發生的網頁,而不是在這種情況下,加載匹配組件Success
。這裏還停留..
更新3(解決方案):
This helped我在這裏把它作爲其他基準,因爲這是對我來說非常沮喪。
在app.js
我不得不改變:
import { BrowserRouter as Router, Route } from 'react-router-dom'
<Router>
到
import { Route } from 'react-router-dom'
import { Router } from 'react-router'
import navigationStore from 'stores/navigation-store'
<Router history={navigationStore.history}>
我希望這可以幫助別人:)
我基本上想導入商店(就像我發佈的),並使用它與商店導航(即歷史意識),而不涉及構造函數。我只是不知道應該如何進行RR4工作。 [Here](https://github.com/hotchpotch/react-navigation-mobx-example/blob/master/src/stores/NavigationStore.js)是'react-navigation'的一個例子,但是在RR4中尋找相同的。原因是我有一個帶有'react-navigation'的RN應用程序,使用了我發佈/鏈接的相同代碼,我想在我的許多操作中重複使用相同的語法,這些操作從組件/商店與RR4 for web進行導航。 – Wonka
抱歉,我不清楚你在問什麼。你能爲你的問題添加更多細節嗎?您是否正在尋找一種根據平臺使用React-router 4或Navigation Store的方法?在構造函數中傳遞商店有什麼問題? –
添加了更新,希望它更清晰:) – Wonka