我想創建一個有側欄的儀表板,並且該側欄會更改狀態。如何根據狀態動態顯示組件
這裏是我如何做到這一點
我SHOWPAGE:
showPage(page) {
switch (page) {
case 'feeds':
return <HelpPage />;
case 'messages':
return <MessagesPage />;
case 'projects':
return <ProjectsPage />;
case 'support':
return <SupportPage />;
case 'about':
return <AboutPage />;
default:
return <DialogPage />;
}
}
我的渲染方法:
如何切換頁面:
handleClick(page) {
this.props.pageSwitcher(page);
}
...
<ListItem
primaryText="Feeds"
onClick={() => this.handleClick("feeds")} />
如何調用元素:
<Col xs={6} sm={6} md={6} lg={8}>
{
this.showPage(page)
}
</Col>
我的行動:
export function pageSwitcher(page = '') {
let payload = {};
switch (page) {
case 'feeds':
payload = {
type: types.SHOW_HELPS_FEED,
page,
};
break;
case 'messages':
payload = {
type: types.SHOW_INBOX,
page,
};
break;
case 'projects':
payload = {
types: types.SHOW_PROJECTS,
page,
};
break;
case 'support':
payload = {
types: types.SHOW_SUPPORT,
page,
};
break;
case 'about':
payload = {
types: types.SHOW_ABOUT,
page,
};
break;
default:
payload = {
types: '',
page,
};
}
return payload;
}
開始的時候,它加載默認組件<DialogPage />
。但是當我點擊Feed ListItem
後,它不會用<HelpPage />
替代<DialogPage />
。但是我可以在Redux調試工具中看到它在HelpPage
中調用componentWillMount
。
如何根據狀態動態顯示組件?
謝謝!
編輯: 它工作,如果在我的showPage
只返回一個組件,但如果我返回一個容器它不會顯示任何東西。這是因爲我有componentWillMount
調用了一個操作,儀表板的前一個狀態正在被替換。 這裏是我想要加載我的容器的減速機:
import * as types from '../actions/actionTypes';
export default function helpsReducer(state = {
isFetching: false,
items: [],
}, action) {
switch (action.type) {
case types.HELPS_FEED_REQUEST:
return Object.assign({}, state, {
isFetching: true,
});
case types.HELPS_FEED_SUCCESS:
return Object.assign({}, state, {
isFetching: false,
items: [
...state.items,
...action.items,
],
});
default:
return state;
}
}
它看起來像你沒有提供足夠的細節真正重要的事情。剝離網格和大部分渲染項目,然後插入其他內容,如pageSwitcher等。(請參閱https://medium.com/@dan_abramov/asking-good-questions-421f08ee7e5c#.w1rhnxu9b)另外,還需要一個jsbin使用最小版本的代碼可以幫助其他人幫助您。 –
添加你的父組件,其中pageSwitcher方法存在 –
@GoshaArinich我更新了我的問題。我做了什麼建議,但顯然它不會顯示任何東西,除了一個組件。因爲如果我切換到一個容器,不知何故,我的儀表板的狀態是空的 –