【问题标题】:React and typescript dynamic grid resizeReact 和 typescript 动态网格调整大小
【发布时间】:2022-01-25 05:12:41
【问题描述】:

我正在尝试通过使用响应和打字稿代码的 onClick 操作更改 lgEditorSize 值来调整动态网格的大小。

声明初始lgEditorSize值

const x: any = {};
x.lgEditorSize=6;

更改 lgEditorSize 值

<Box display='flex' justifyContent='right'>
      <span>Show or hide the sidebar using</span>
      <Button onClick={() => {x.lgEditorSize=12;}}> <ArrowBackIosIcon/> </Button>
      <Button onClick={() => {x.lgEditorSize=6;}}> <ArrowForwardIosIcon/> </Button>  
      <span>Button</span> 
</Box>


<GridContainer>
            <Grid item lg={x.lgEditorSize}>
                Contents
            </Grid>
<GridContainer>      

值已更改但网格未调整大小,任何想法使用按钮操作调整网格大小。

【问题讨论】:

    标签: javascript css reactjs typescript bootstrap-4


    【解决方案1】:

    您正在更改变量,但组件没有重新渲染,因为它不知道自己需要这样做。要实现重新渲染,您需要使用状态,因为 React 足够聪明,知道当状态发生变化时,所有使用该状态的组件都应该重新渲染。

    您应该将lgEditorSize 放入状态并使用状态变量。它看起来像这样。

    const [lgEditorSize, setLgEditorSize] = useState<GridSize>(6); 
    
    <Box display='flex' justifyContent='right'>
          <span>Show or hide the sidebar using</span>
          <Button onClick={() => setLgEditorSize(12)}> <ArrowBackIosIcon/> </Button>
          <Button onClick={() => setLgEditorSize(6)}> <ArrowForwardIosIcon/> </Button>  
          <span>Button</span> 
    </Box>
    
    
    <GridContainer>
                <Grid item lg={lgEditorSize}>
                    Contents
                </Grid>
    <GridContainer>  
    

    您可以在此处阅读有关 state 和 React 组件生命周期的更多信息:https://reactjs.org/docs/state-and-lifecycle.html

    【讨论】:

    • 我之前尝试过这个解决方案但是我在这一行中遇到了错误 类型'数字'不可分配给类型'布尔|网格大小 |未定义'。
    • @Ali-Alrabi 我已经编辑了答案以将类型添加到useState,您需要从 MaterialUI 或您正在使用的任何组件库中导入 GridSize 类型。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多