要設置上下文,我在lesson 12 of react-router-tutorial,但隨着我一直沿着,我實際上在做TypeScript中的所有事情。在教程這一點上,在幾個反應的組分被一個稱爲Repos
在react-router中,this.context.router的類型是什麼?
export class Repos extends React.Component<ReposProps, {}> { ... }
,其一個
Router
<Router history={browserHistory}>
{/* ... */}
<Route path="/repos" component={Repos}>{/* ... */}</Route>
{/* ... */}
</Router>
某處內側Repos
創建
是需要一些參數從HTML形式的方法和構造一個新的路徑,瀏覽器直接到:
handleSubmit(event: React.FormEvent) {
/* ... (define userName and repo vars) */
const path = `/repos/${userName}/${repo}`
this.context.router.push(path);
}
我的問題是最後一行是context
和router
的類型是什麼?
在the React documentation on Contexts我明白,上下文通常在每個元素中定義。這似乎是在這裏輝煌的想法是在Repos
定義context
與來自react-router's TypeScript type definitions
interface ReposContext extends Something /* ??? */ { }
這裏,Something
定義將有router
定義爲某種類型的具有push
方法的一些接口擴展的接口。
API並不是說Router
有一個方法push
雖然Glossary這樣做,這是混亂。無論如何,在DefinitelyTyped類型定義不Router
下定義push
方法(雖然我不相信他們是完美的,這個遺漏似乎並不意外我)
這些相同的API並指出RouterContext
其中提到context.router
- - context.router
確實定義了push()
以及其他一些方法。
那好吧我在反應路由器的類型定義history.d.ts注意到,接口History
具有所有的相同方法(加上一對夫婦更
也許這個接口越來越接近呢。這不是任何延伸因爲我曾它想(也許這就是餘地反應路由器分型,以提高),但它有我需要什麼。
interface ContextRouter extends History { }
interface ReposContext {
router: ContextRouter
}
我仍然懷疑,因爲它並不完全意義儘管這ContextRouter
延伸History