默认属性 (Default Props)

React Suite 允许你使用 CustomProvider 组件全局设置组件的默认属性。当你希望在整个应用程序中保持一致的样式和行为,而不必重复指定相同的属性时,这非常有用。

基本用法

要设置组件的默认属性,请使用 CustomProvider 组件的 components 属性。components 属性接受一个对象,其中键是组件名称,值是包含这些组件默认属性的对象。

import { CustomProvider } from 'rsuite';

const components = {
  Button: {
    defaultProps: { size: 'sm' }
  },
  Input: {
    defaultProps: {
      size: 'sm',
      placeholder: '请输入...'
    }
  }
  // 更多组件...
};

function App() {
  return <CustomProvider components={components}>{/* 你的应用组件 */}</CustomProvider>;
}

组件特定的默认值

你可以为任何 React Suite 组件设置默认属性。以下是一些常见示例:

设置默认尺寸

const components = {
  Button: { defaultProps: { size: 'sm' } },
  Input: { defaultProps: { size: 'sm' } },
  SelectPicker: { defaultProps: { size: 'sm' } }
  // ...
};

设置按钮的默认外观

const components = {
  Button: { defaultProps: { appearance: 'ghost' } }
  // ...
};

禁用所有 Picker 组件的搜索功能

const components = {
  SelectPicker: {
    defaultProps: {
      searchable: false
    }
  },
  CheckPicker: {
    defaultProps: {
      searchable: false
    }
  },
  TagPicker: {
    defaultProps: {
      searchable: false
    }
  }
  // ...
};

覆盖默认值

可以通过显式地向单个组件传递属性来覆盖默认属性:

// 在你的 CustomProvider 配置中
const components = {
  Button: { defaultProps: { size: 'sm', appearance: 'ghost' } }
  // ...
};

// 在你的组件中
<Button size="lg" appearance="primary">
  这个按钮覆盖了默认值
</Button>;

完整示例

以下是设置多个组件默认属性的完整示例:

import React from 'react';
import { CustomProvider, Button, Input, SelectPicker } from 'rsuite';

const components = {
  // 按钮默认值
  Button: {
    defaultProps: {
      size: 'sm',
      appearance: 'ghost'
    }
  },

  // 输入框默认值
  Input: {
    defaultProps: {
      size: 'sm',
      placeholder: '请输入...'
    }
  },

  // 选择器默认值
  SelectPicker: {
    defaultProps: {
      size: 'sm',
      placeholder: '请选择',
      searchable: false,
      cleanable: false,
      virtualized: true
    }
  }

  // 根据需要添加更多组件
};

function App() {
  return (
    <CustomProvider components={components}>
      <Button>默认按钮</Button>
      <Input />
      <SelectPicker
        data={[
          { label: '选项1', value: '1' },
          { label: '选项2', value: '2' }
        ]}
      />
    </CustomProvider>
  );
}

export default App;