我有react-router
4.0.0-alpha.4安裝在我的項目做出反應,這就是我下面的教程,和我有一個非常困難的時候,理解它如何被稱爲StorePicker.jsx
使用contextTypes時如何創建react-router?
App.jsx
import React from 'react';
import { render } from 'react-dom';
import './css/style.css';
import {BrowserRouter, Match, Miss} from 'react-router';
import StorePicker from './components/StorePicker';
import App from './components/App';
import NotFound from './components/NotFound';
const Root =() => {
return(
<BrowserRouter>
<div>
<Match exactly pattern="/" component={StorePicker}/>
<Match pattern="/store/:storeId" component={App}/>
<Miss component={NotFound}/>
</div>
</BrowserRouter>
)
}
render(<Root/>, document.querySelector('#main'));
所以朝StorePicker.jsx
末我創建StorePicker
對象的contextTypes
屬性。然後我設置該值等於{ router: React.PropTypes.object }
。儘管如此,React.PropTypes.object
與路由器無關。
但是在goToStore(event)
中突然出現router
對象可用於this.context.router
。
這是從哪裏來的?是否因爲在
contextTypes
中使用router
這個詞是一個特殊的關鍵字,並且React.PropTypes.object
因爲某種原因知道獲取路由器對象並將其添加到this.context
?爲什麼本教程甚至告訴我使用這種模式?根據React文檔,
context
應該避免:https://facebook.github.io/react/docs/context.html有沒有更好的方法來做到這一點?
StorePicker.jsx
import React from 'react';
import { getFunName } from '../helpers.js'
class StorePicker extends React.Component{
goToStore(event){
event.preventDefault();
const storeId = "1234";
this.context.router.transitionTo(`/store/${storeId}`);
}
render(){
return (
<button onClick={(e) => this.goToStore(e)}>CLICK ME</button>
)
}
};
StorePicker.contextTypes = {
router: React.PropTypes.object
}
export default StorePicker;
從本教程中的代碼工作,但我不知道爲什麼它的工作。
你會注意到我已經鏈接到我的問題中的文檔。所以很明顯,告訴我答案是我已經聯繫到的東西不會讓我到任何地方。我很難理解文檔。原諒我愚蠢。 – fuzzybabybunny
我能夠找到比官方文檔更詳細,更清晰地解釋'context&contextTypes'的更好的資源:https://javascriptplayground.com/blog/2017/02/context-in-reactjs -applications / – fuzzybabybunny