【问题标题】:Antd/React: Trying to style the 'extra' parameter of the Antd Collapse Panel elementAntd/React:尝试设置 Antd Collapse Panel 元素的“额外”参数的样式
【发布时间】:2019-11-07 17:20:11
【问题描述】:

我有一个 antd 面板作为折叠/手风琴元素的一部分,我正在尝试对文本的附加部分进行样式设置和渲染,作为标题的一部分。我通读了他们的文档,他们允许您通过使用 extra 属性添加额外的元素,但我似乎无法为其设置样式或添加条件渲染属性。我想要实现的是在手风琴关闭时将标题的右侧文本设置为“显示”,并在手风琴打开时将其更改为“隐藏”。我还想将文本设置为蓝色。我冒险尝试了不同的方法,包括顶部的以下功能,但没有任何效果。在当前的实现中,我遇到了几个错误。

预期的是赋值或函数调用,但看到的是表达式。

index.js:1446 警告:道具类型失败:提供给 CollapsePanel 的道具 extra 无效,应为 ReactNode。

index.js:1446 警告:函数作为 React 子级无效。如果您返回一个组件而不是从渲染中返回,则可能会发生这种情况。或者,也许您打算调用这个函数而不是返回它。

以下是我的组件:

import React from 'react'
import styled from 'styled-components'
import { Col, Row, Collapse } from 'antd'
import Checkbox from '../elements/Checkbox'
import icon from '../../assets/caretDown.svg'
import Button from '../elements/Button'

const { Panel } = Collapse

function showHide() {
  return Collapse.isActive ? <p>SHOW</p> : <p>HIDE</p>
}

const ConfigurationOptions = () => (
  <Container>
    <Row>
      <Col span={12}>
        <StyledCollapse>
          <Panel
            header="DROPDOWN EXAMPLE"
            key="1"
            showArrow={false}
            bordered={false}
            extra={showHide}
          >
            <div>
              <StyledH1>Placeholder</StyledH1>
            </div>
        </Panel>
      </StyledCollapse>
    </Col>
  </Row>
</Container>
)

const StyledH1 = styled.h1`
  font-weight: 700;
`

const StyledCollapse = styled(Collapse)`
  &&& {
    border: none;
    border-radius: 0px;
    background-color: #f7f7f7;
    box-shadow: none;
  }
`

export default ConfigurationOptions

【问题讨论】:

  • 事先从语法错误中修复代码
  • 不确定你的意思。我添加了我缺少的结束 &lt;/Container&gt; 标签。你说的是这个吗?
  • 添加了答案

标签: javascript reactjs antd


【解决方案1】:

Collapse.Panel extra 属性接受 ReactNode 而不是函数,这意味着您需要将 ReactElement 传递给它:

extra={<p>{disabled ? 'SHOW' : 'HIDE'}</p>}
function FromValidate() {
  const [disabled, setDisabled] = useState(true);
  return (
    <Flexbox>
      <Row>
        <Col span={12}>
          <StyledCollapse onChange={() => setDisabled(prev => !prev)}>
            <Collapse.Panel
              header="DROPDOWN EXAMPLE"
              key="1"
              showArrow={false}
              bordered={false}
              extra={<p>{disabled ? 'SHOW' : 'HIDE'}</p>}
            >
              <div>
                <StyledH1>Placeholder</StyledH1>
              </div>
            </Collapse.Panel>
          </StyledCollapse>
        </Col>
      </Row>
    </Flexbox>
  );
}

Demo

【讨论】:

  • 嘿!所以这几乎可以工作,我唯一的问题是,因为我有 3 个单独的面板,当我将这个逻辑应用于所有 3 个面板时,它会同时影响所有面板,即使只有一个面板打开而其他面板仍然折叠。我分叉了你原来的沙箱并更新了它以显示我在这里的意思:codesandbox.io/s/q-56761334-style-collapse-extra-bdcbz。关于如何解决的任何想法?
  • 你的问题超出了这个范围,你应该再问一个(请随时给我发链接)(并接受答案)
  • 答案已接受,新问题已提出:stackoverflow.com/questions/56774261/…
猜你喜欢
  • 2022-08-23
  • 2022-10-25
  • 2020-03-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2020-05-22
相关资源
最近更新 更多