首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写BaseWeb的按钮标签文本

重写BaseWeb的按钮标签文本
EN

Stack Overflow用户
提问于 2020-12-10 13:53:59
回答 3查看 299关注 0票数 1

试图重写文件Uploader's按钮文本,但ButtonComponent.propsany类型,因此无法确定我能够传递到那里的内容。我受按钮文档启发的想法是设置children属性,但按钮文本保持不变。有人能给点提示吗?

代码语言:javascript
复制
import { FileUploaderProps, FileUploader } from 'baseui/file-uploader';
import React, { FC } from 'react';

const StyledFileUploader: FC<FileUploaderProps> = (props) => {
  return (
    <FileUploader
      {...props}
      overrides={{
        ButtonComponent: {
          props: {
            children: 'text',
            overrides: {
              BaseButton: {
                children: 'text',
                props: {
                  children: 'text',
                },
                style: () => ({
                  backgroundColor: '#A4A4A4',
                  color: '#fff',
                  borderRadius: '2px',
                  paddingTop: '3px',
                  paddingRight: '22px',
                  paddingBottom: '3px',
                  paddingLeft: '22px',
                  fontSize: '16px',
                  lineHeight: '20px',
                  ':hover': {
                    backgroundColor: '#A4A4A4',
                    color: '#fff',
                  },
                }),
              },
            },
          },
        },
        FileDragAndDrop: {
          style: () => {
            return {
              backgroundColor: 'transparent',
              borderLeftColor: 'transparent',
              borderRightColor: 'transparent',
              borderTopColor: 'transparent',
              borderBottomColor: 'transparent',
            };
          },
        },
        ContentMessage: {
          style: () => {
            return {
              display: 'none',
            };
          },
        },
      }}
    />
  );
};

export default StyledFileUploader;

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-12 12:12:17

我怀疑你不可能在不覆盖整个组件的情况下。对于children道具来说,这是一个奇怪的例外。

看看这个最小的例子startEnhancer会受到尊重,children不会:

代码语言:javascript
复制
import { FileUploader } from "baseui/file-uploader";
import React from "react";

const StyledFileUploader = (props) => {
  return (
    <FileUploader
      {...props}
      overrides={{
        ButtonComponent: {
          props: {
            startEnhancer: "I'm here!",
            children: "I won't be..."
          }
        }
      }}
    />
  );
};

export default StyledFileUploader;

原因可以在执行过程中找到:

  1. FileUploader给了Button重写道具这里
  2. Button ifself将自己的道具(this.props)传递给ButtonInternals 这里
  3. ButtonInternals呈现它的children和其他一些东西( 这里 )

但是 FileUploader{locale.fileuploader.browseFiles}传递给Button作为children 这里,这是在overrides之后(因此重写了.)

您可能想要提交一个bug报告(因此children放在FileUploader中的重写道具之前),或者只是重写整个按钮组件。

票数 2
EN

Stack Overflow用户

发布于 2020-12-13 13:23:45

在接受答案的帮助下,我想出了如何覆盖按钮组件。最初我认为这是不可能的(因为组件丢失了单击处理程序),但是props实际上正在携带它,所以我们可以使用<Button {...props}

代码语言:javascript
复制
export const StyledFileUploader: FC<FileUploaderProps> = (props) => {
  return (
    <FileUploader
      {...props}
      overrides={{
        ButtonComponent: (props) => (
          <Button
            {...props}
            overrides={{
              BaseButton: {
                style: () => ({
                  backgroundColor: '#A4A4A4',
                  color: '#fff',
                  borderTopRightRadius: '2px',
                  borderTopLeftRadius: '2px',
                  borderBottomRightRadius: '2px',
                  borderBottomLeftRadius: '2px',
                  paddingTop: '3px',
                  paddingRight: '22px',
                  paddingBottom: '3px',
                  paddingLeft: '22px',
                  fontSize: '16px',
                  lineHeight: '20px',
                  ':hover': {
                    backgroundColor: '#A4A4A4',
                    color: '#fff',
                  },
                }),
              },
            }}
          >
            Upload
          </Button>
        ),
        FileDragAndDrop: {
          style: () => {
            return {
              backgroundColor: 'transparent',
              borderLeftColor: 'transparent',
              borderRightColor: 'transparent',
              borderTopColor: 'transparent',
              borderBottomColor: 'transparent',
            };
          },
        },
        ContentMessage: {
          style: () => {
            return {
              display: 'none',
            };
          },
        },
      }}
    />
  );
};
票数 2
EN

Stack Overflow用户

发布于 2020-12-22 20:17:05

若要更改任何文本,应使用LocaleProvider:https://baseweb.design/guides/internationalization/

覆盖/替换组件应该是最后的手段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65235894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档