我正在使用一个ReactJS Accordion组件,在该组件中,我在每个部分中呈现表单.但是,当我折叠然后展开折叠按钮时,所有表单输入都重置为其默认值.这似乎是由isOpen状态更改时的重新渲染触发的.如何在保留手风琴功能的同时保留表单状态?

我已经在父文件中定义了表单状态,其中使用了<Accordion {...props}/>,并将setState函数作为props 发送.在Form组件内部调用setState

Accordioin组分

export default function Accordian({
  title,
  content,
  children,
  headingPrefixIcon,
  headingSuffixIcon,
  fontSize = 'medium',
  textSize = 'lg',
  customizableClassProps = 'border-t',
  showToggle = false,
  showBadge,
  badgeText,
  isCollapsible = true,
  taggleEnable,
  setTaggleEnable,
  useAccordianStateForToggle = false
}) {
  const [isOpen, setIsOpen] = useState(true);

  const toggleAccordion = () => {
    setIsOpen(!isOpen);
  }

  const [enabled, setEnabled] = useState(false);

  return (
    <div className='border border-gray-200 rounded-base mb-2 w-full'>
      <div
        className='flex justify-between items-center p-3 cursor-pointer bg-[#F9F8FD] rounded-base select-none'
        onClick={toggleAccordion}
      >
        <div className='flex items-center gap-2'>
          <div>{headingPrefixIcon}</div>
          <h2
            className={`text-${textSize} font-${fontSize} text-app-description`}
          >
            {title}
          </h2>
          <div>{headingSuffixIcon}</div>
        </div>
        {isCollapsible ?
          !showToggle ? (
            isOpen ? (
              <ChevronUpIcon className='w-6 h-6' />
            ) : (
              <ChevronDownIcon className='w-6 h-6' />
            )
          ) : (<FlyyToggle enabled={!useAccordianStateForToggle ? taggleEnable : isOpen} setEnabled={!useAccordianStateForToggle ? setTaggleEnable : setIsOpen} sort />) : showBadge ? <FlyyBadge size={"small"} rounded grey badgeText={badgeText} /> : <div />}
      </div>
      {isOpen && (
        <div className={`p-3 ${customizableClassProps} border-gray-200`}>
          {content || children}
        </div>
      )}
    </div>
  )
}

这些形式是通过content个props 呈现的.

我已经try 在父文件中初始化状态,但仍然面临相同的问题.

如果您需要任何其他细节,请让我知道 谢谢

推荐答案

如果您需要将表单保留在页面中,您可以使用css来显示或隐藏它,避免在每次关闭Accordion时都 destruct 它.

<div className={`${isOpen ? '' : 'hidden'} p-3 ${customizableClassProps} border-gray-200`}>
  {content || children}
</div>

Reactjs相关问答推荐

如何在react组件中使用formik进行验证

有没有办法将在服务器端全局获取的一些数据传递到Next&>13应用程序目录中的客户端组件?

是否在Extra Reducer完成作业(job)时触发createListenerMiddleware?

REACTION 18功能组件正在开发中的S

页面永远加载API/从数据库获取数据

为什么我得不到我想要的数据?

Reaction路由-如何在布局路由内呈现&q;/:id&q;路由

如何修复ReferenceError:在构建过程中未定义导航器

如何使用 React 获取表单中的所有值?

如何垂直对齐 React Bootstrap Table 行中的项目

当我使用 Firebase Auth 在 React 中刷新主页时显示登录页面

React - 将一个充满空值的无限大小的数组存储在 ref 中是否可以,或者我应该重置数组吗?

臭名昭著的测试未包含在 act(...) 中

改变输入的默认值时出现问题:number react-hook-form

如何在react 中正确销毁上下文?

我正在try 使用 cypress 测试我的下拉列表,它 Select 值但不提交它们(手动工作)

如何在 MUI 数据网格中的 renderCell 组件之间传递状态

Cypress - 在继续之前等待下一个按钮重新出现

加密 Django Rest Framework API 响应 + 解密响应应用程序中的响应

axios post方法中的请求失败,状态码为500错误