【发布时间】:2019-05-19 19:45:10
【问题描述】:
所以我有一个 SideDrawer,我在根 App 组件中像这样渲染:
render() {
const { isOpen } = this.props;
return (
<BrowserRouter>
<SideDrawer />
{/* isOpen && <SideDrawer /> */}
<Routes ..../>
</BrowserRouter>
);
}
}
这是减速器:
export const drawer = (state = initialState, { type, payload }) => {
switch (type) {
case CLOSE_DRAWER:
return { ...state, isOpen: false };
case OPEN_DRAWER:
return { isOpen: true, movieId: payload };
default:
return state;
}
};
而在SideDrawer 组件中,我使用抽屉的状态和css来处理转换:
export const SideDrawer = ({ isOpen, closeDrawer, movieId }) => {
const drawerClass = cx({
container: true,
open: isOpen,
});
return (
<div className={drawerClass}>
<button className={styles.button} onClick={closeDrawer}>
<img src={backButton} alt={text.alt} />
</button>
<MovieBanner movieId={movieId} />
</div>
);
};
现在,我的导师要我有条件地渲染 SideDrawer。如果isOpen 为真,则渲染 SideDrawer。但是,问题是转换不起作用,因为我只会在isOpen 的状态为真时渲染SideDrawer。它现在工作的唯一方法是,如果我一直在 App 组件上渲染它,这样我就可以跟踪状态并在状态从 false 更改为 true 时添加我的 CSS 转换
我的导师提到只有在 SideDrawer 打开时才渲染 SideDrawer,但我需要渲染它才能知道它以前的状态不是吗?
【问题讨论】:
-
为什么需要通过reducer-state来管理SideDrawer?使用组件状态,使用按钮在 isOpen 状态之间切换。始终安装它。如果 isOpen 为 true,则显示 sideBar,如果不是,则显示按钮。
-
我将它放在减速器中,因为我将从不同的组件中调用 SideDrawer。
标签: javascript css reactjs transition