You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击Checkbox后未显示文本字段,Collapse组件失效问题排查

解决Checkbox点击后Collapse组件不显示内容的问题

以下是导致功能失效的几个核心问题及修复方案:


1. 初始值缺失sub字段

你的defaultInitialIngestObject仅定义了pushEnabled,但Checkbox绑定的是sub字段,初始时formik.values.sub为undefined。而Collapse的in属性需要明确布尔值,undefined会被解析为false,导致默认不显示,且可能影响后续状态更新。

修复:在初始值对象中添加sub字段:

let defaultInitialIngestObject = {
  pushEnabled: true,
  sub: false // 新增初始状态字段
}

2. Checkbox错误使用onClick事件

MUI的Checkbox应使用onChange监听状态变化,onClick在部分场景下触发时机异常,会导致状态更新不及时。

修复:替换事件为onChange,同时给checked属性加默认值避免undefined:

<Checkbox size="large"
  onChange={(evt) => formik.setFieldValue("sub", evt.target.checked)}
  checked={formik.values.sub || false}
/>

3. Grid结构缺少container属性

外层<Grid item xs={12}>未添加container属性,MUI的Grid需要container作为容器包裹item,否则布局会异常,甚至导致Collapse内容被隐藏。

修复:修改外层Grid为容器类型:

<Grid container xs={12}>
  {/* 内部item Grid */}
</Grid>

4. Collapse的in属性确保布尔值

为彻底避免formik.values.sub为undefined的情况,用双感叹号强制转换为布尔值:

<Collapse in={!!formik.values.sub}>

完整修正代码

import React from 'react';
import { Grid, FormControlLabel, Checkbox} from '@mui/material';
import { Collapse } from 'react-collapse';
import { useFormik } from 'formik';
import MyTextField from './MyTextField';

let defaultInitialIngestObject = {
  pushEnabled: true,
  sub: false
}

export default function App(props) {
  const { initialValues } = props
  const formik = useFormik({
    initialValues: initialValues || defaultInitialIngestObject,
  });

  return (
    <div>
      <Grid container xs={12}>
        <Grid item xs={4}>
          <FormControlLabel
            style={{ margin: 0, padding: 0, marginTop: '8px', verticalAlign: 'top' }}
            label="Submit"
            control={
              <Checkbox size="large"
                onChange={(evt) => formik.setFieldValue("sub", evt.target.checked)}
                checked={formik.values.sub || false}
              />
            }
          />
        </Grid>

        <Collapse in={!!formik.values.sub}>
          <Grid item xs={4}>
            <MyTextField
              disabled={!formik.values.sub}
              id="firs"
              label="First"
              formik={formik}
            />
          </Grid>
        </Collapse>
      </Grid>
    </div>
  )
}

内容的提问来源于stack exchange,提问作者James254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:01:18