React Native 在Native Base中为Button创建自定义主题变体(更改禁用的颜色)

3duebb1j  于 2023-04-07  发布在  React
关注(0)|答案(2)|浏览(156)

我最近在我的React Native应用程序中使用Native Base。我正在创建我的自定义主题并为我的按钮创建一些变体。如果按钮被禁用,我想更改背景颜色。
这些是默认的原生基础变体[https://github.com/GeekyAnts/NativeBase/blob/v3-pre-beta/src/theme/components/button.ts],我已经看到他们是如何使用props.isDisabled来更改一些props的。但对我来说,console.log正在向我发送undefined。这是我的代码

import { extendTheme } from 'native-base'
  import { Dict } from 'native-base/lib/typescript/theme/tools'

  const variantLogin = (props: Dict) => {
    console.log('const is disabled', props.isDisabled)
    return {
      bg: props.isDisabled
        ? theme?.colors?.gray['200']
        : theme?.colors?.orange?.main,
      _text: {
        color: props.isDisabled
          ? theme?.colors?.gray['500']
          : theme?.colors?.white,
      },
    }
  }

  export const theme = extendTheme({
    colors: {
      white: '#ffffff',
      black: '#000000',
      gray: {
        100: '#f5f5f5',
        200: '#d8d8d8',
        300: '#c4c4c4',
        500: '#828282',
        800: '#4b4a4a',
        900: '#1a1a1a',
      },
      gold: {
        main: '#e7c14d',
      },
    },
  components: {
    Button: {
      variants: {
        login: variantLogin
      }
    }
  }
})

export default theme

颜色会随着

<Button isDisabled={disabled} variant={'login'}>{text}</NativeButton>

它显示和橙子按钮与白色字母,但不是当被禁用,只有更多的透明度出现。

l3zydbqr

l3zydbqr1#

我不知道是否有方法传递isDisabled prop,但这里有一个解决方法:

const variantLogin = (props: Dict) => {
  return {
    bg: theme?.colors?.orange?.main,
    _disabled: {
      bg: theme?.colors?.gray['200'],
    },
    _text: {
      color: theme?.colors?.white,
      _disabled: { color: theme?.colors?.gray['500']}
    },
  }
}
txu3uszq

txu3uszq2#

你使用的是函数的变体,而不是将它们声明为对象。如果你将它们声明为对象(ex):

primary: {
  background: 'colors.primary.main',
  _text: {
    color: colors.text.main,
  },
  _disabled: {
    backgroundColor: colors.background.main,
    _text: {
      color: colors.text.disabled,
    },
  },
},

或者你可以只使用一个定义baseStyle和defaultProps,并使用一个带有上下文props的函数动态设置它。如果你使用函数,但你定义了超过1个variable,Native Base将从defaultProps.variant中获取_disabled的定义。

相关问题