reactjs - 抽屉在服务器端渲染的第一次渲染中不起作用
问题描述
我需要在我的 Meteor 应用程序中实现 SSR,我在使用MaterialUI的Drawer时遇到问题,无法使用 onClick 事件处理程序进行切换。
任何样板文件或示例链接都会有所帮助。
版本:
@material-ui/core:3.1.1
@material-ui/icons:3.0.1
METEOR@1.8-rc.16
这就是我目前添加抽屉的方式:
const Header = props => {
const { classes, handleDrawerToggle, mobileOpen } = props
return (
<div>
<StyledAppBar>
<TopBorders>
<div />
<div />
<div />
<div />
</TopBorders>
<Grid container justify="center">
<Grid item lg={9} md={10} sm={9} xs={12}>
<Toolbar>
<div style={{ flex: 1 }}>
<Link to="/">
<LogoImage src="/img/Logo.png" alt="Drone Pilot" />
</Link>
</div>
<div>
<Hidden mdUp implementation="css">
<IconButton
aria-label="open drawer"
onClick={() => handleDrawerToggle(!mobileOpen)}
>
<MenuIcon />
</IconButton>
</Hidden>
<Hidden smDown implementation="css">
<NavItem />
</Hidden>
</div>
</Toolbar>
</Grid>
</Grid>
</StyledAppBar>
<Drawer
variant="temporary"
anchor="right"
open={mobileOpen}
onClose={() => handleDrawerToggle()}
ModalProps={{
keepMounted: true, // Better open performance on mobile.
}}
classes={{
paper: classes.drawerPaper,
}}
>
<NavItem />
</Drawer>
</div>
)
}
const mapStateToProps = state => ({
mobileOpen: state.mainReducer.mobileOpen,
})
function mapDispatchToProps(dispatch) {
return bindActionCreators(ActionCreators, dispatch)
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(withStyles(styles)(Header))
解决方案
Drawer 的功能由状态切换管理,状态切换由事件处理程序触发。并且它们不会与 SSR 呈现的内容一起推送。所以,这就是反应假设的工作方式。并且在客户端启动时附加事件。
参考:
如果您在已经具有此服务器渲染标记的节点上调用 ReactDOM.hydrate(),React 将保留它并仅附加事件处理程序,从而使您获得非常高效的首次加载体验。
推荐阅读
- c# - C#,如果另一个方法返回 true,则启动方法
- forms - I have this code, when submited the form dont refresh, someone know how refresh after submit on october cms?
- python - SWIG 和 Boost::variant
- bash - 使用 find 查找与带有可选组的正则表达式匹配的文件夹
- ios - 网络请求延迟
- c - 反向打印的数组元素
- prestashop - Prestashop PHP 导入自定义值功能
- php - 如果为空,则重定向用户以填充属性
- powershell - 在 Write-Host 中间运行命令
- c++ - Segmentation fault in SFML when i try to draw an sf::Text object