遇到一個很麻煩的問題。
react開發(fā),我在根目錄的router的app.js里面寫了一個請求,查看是否登錄。如果登錄,則把返回的數(shù)據(jù)存儲到redux的store里面,如果未登錄,則跳回/主頁。
App.js
class App extends React.Component {
componentDidMount () {
// 初始化快速點擊
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function () {
FastClick.attach(document.body)
}, false)
}
api.isLogin().then((res) => {
if (res.status==1) {
console.log('not jump');
const { store } = this.context;
res.data.login = true;
this.props.saveUser(res.data); //這個是store存儲,
}else
{
const { store } = this.context;
res.data.login = false;
this.props.saveUser(null); //這個是store存儲,存null
console.log('set');
var urlName = location.hash.split("/");
if (urlName[1]=='View') {
}else{
console.log('jump');
hashHistory.push('/'); //跳轉(zhuǎn)
}
}
console.log(res)
}, (err) => {
console.log(err);
})
}
shouldComponentUpdate () {
return false
}
render () {
return (
<Router history={hashHistory} basename="/product/dist">
{/* 首頁 */}
<Route path='/' component={Home} >
{/* <Route path="/login" component={Login}/> */}
</Route>
<Route path='/User/:actid' component={User} >
{/* <Route path="/login" component={Login}/> */}
</Route>
<Route path='/Editor/:actid/:editArt' component={Editor} >
{/* <Route path="/login" component={Login}/> */}
</Route>
<Route path='/View/:actid/:artid' component={View} >
{/* <Route path="/login" component={Login}/> */}
</Route>
{/* 404頁面 */}
<Route path="*" component={NotFound}/>
</Router>
)
}
}
const mapStateToProps = (state) => {
return {
setUser: state.User
}
};
const mapDispatchToProps = (dispatch) => {
return {
saveUser: (data) => {
dispatch(saveUser(data))
},
}
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
App.contextTypes = { store: PropTypes.object.isRequired }
// export default App
然后主頁里面寫了一個本地路由,根據(jù)state來渲染組件,現(xiàn)在的問題是每次 home.js都是在App.js之前渲染,所以home.js拿取的數(shù)據(jù)都是store初始數(shù)據(jù)
home.js
componentDidMount()
{
const { store } = this.context;
console.log(store.getState().webState.user_data);
if(store.getState().webState.user_data)
{
this.setState({pageState:'SelectAct'});
}else
{
this.setState({pageState:'Index'});
};
}
LocalRouter()
{
switch (this.state.pageState) {
case 'Index':
return <MainKV />;
break;
case 'Login':
return <Login attrLogin={this.changeState}/>;
break;
case 'SelectAct':
return <SelectAct />;
break;
}
}
奇怪的是,我在localstorage里面本地化了stroe(為了刷新store里的數(shù)據(jù)不會初始化)
STATE.JS(redux)
import {SAVEUSER,SAVEACTID } from '../actions/STATE';
/*
* 初始化state
*/
const initState = {
user_data:null,
ActID:null,
baseURL:'http://wechat.crnonline.org/'
};
function localUpdata(state)
{
var locStore = JSON.parse(localStorage.getItem('persist:root'));
console.log(state);
locStore.webState = JSON.stringify(state);
console.log(locStore.webState);
localStorage.setItem('persist:root',locStore.webState);
console.log(localStorage.getItem('persist:root'));
}
/*
* reducer
*/
export default function reducer(state = initState, action) {
switch (action.type) {
case SAVEUSER:
state.user_data = action.UserData;
localUpdata(state);
return state;
case SAVEACTID:
state.ActID = action.ActID;
localUpdata(state);
return state;
default:
return state
}
}
在代碼log出來的數(shù)據(jù),和調(diào)試工具里面看的數(shù)據(jù)是不一樣的
因為home.js一直獲取到的user_data是null,但是store里面存的是有數(shù)據(jù)的。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。