ConfigProvider 通过Context配置Next组件通用的前缀

如果项目中使用的是 1.x 版本的基础组件(@alifd/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @icedesign/base@latest -S

开发指南

何时使用

Next 组件 className 的默认前缀都是 'next-' ,如 'next-btn',你可能在以下两种情况下想改变这个默认前缀:

  • 自定义组件品牌,如 'my-btn','my-select'

  • 一个页面中同时引入两个主题,防止相同类名样式互相覆盖

基本使用

在应用中使用

  • 为你的应用包裹 ConfigProvider,并设置相应的 prefix

entry.jsx

  1. class App extends React.Component {
  2. render() {
  3. return (
  4. <ConfigProvider prefix="my-">
  5. <div>
  6. <Input />
  7. <Button>Submit</Button>
  8. </div>
  9. </ConfigProvider>
  10. );
  11. }
  12. }
  • scss入口文件中在引入主题scss文件前,设置$css-prefix

entry.scss

  1. $css-prefix: "my-";
  2. @import "~@alife/dpl-xxx/index.scss";

如何让组件支持 ConfigProvider ?

组件的 prefix 支持从 context 中获取:

  1. class App extends React.Component {
  2. static contextTypes = {
  3. prefix: React.PropTypes.string
  4. };
  5. render() {
  6. const prefix = this.context.prefix;
  7. return (
  8. <span className={`${prefix}app`}>
  9. <a className={`${prefix}app-link`}>link</a>
  10. </span>
  11. );
  12. }
  13. }

API

通过Context配置Next组件通用的前缀

参数说明类型默认值
prefix样式类名的品牌前缀String'next-'
children子ElementReactNode-

代码示例

基本

最简单的用法。

ConfigProvider 通过Context配置Next组件通用的前缀 - 图1

查看源码在线预览

  1. import { ConfigProvider } from "@icedesign/base";
  2. /* eslint-disable react/no-multi-comp */
  3. /* eslint-disable react/prefer-stateless-function */
  4. class Demo extends React.Component {
  5. static contextTypes = {
  6. prefix: React.PropTypes.string
  7. };
  8. static propTypes = {
  9. prefix: React.PropTypes.string
  10. };
  11. render() {
  12. const prefix = this.context.prefix || this.props.prefix;
  13. return <span className={`${prefix}btn`}>{prefix}</span>;
  14. }
  15. }
  16. class App extends React.Component {
  17. state = {
  18. prefix: "a-"
  19. };
  20. handleToggle() {
  21. this.setState({
  22. prefix: this.state.prefix === "a-" ? "b-" : "a-"
  23. });
  24. }
  25. render() {
  26. return (
  27. <ConfigProvider prefix={this.state.prefix}>
  28. <div>
  29. <button
  30. className="toggle-prefix"
  31. type="primary"
  32. style={{ marginRight: "10px" }}
  33. onClick={this.handleToggle.bind(this)}
  34. >
  35. 切换前缀
  36. </button>
  37. <Demo />
  38. </div>
  39. </ConfigProvider>
  40. );
  41. }
  42. }
  43. ReactDOM.render(<App />, mountNode);
  1. .toggle-prefix {
  2. width: 100px;
  3. height: 40px;
  4. border: 1px solid #999;
  5. border-radius: 3px;
  6. background: #FFF;
  7. font-size: 14px;
  8. outline: none;
  9. cursor: pointer;
  10. }
  11. .a-btn {
  12. display: inline-block;
  13. width: 40px;
  14. height: 40px;
  15. line-height: 40px;
  16. text-align: center;
  17. font-size: 14px;
  18. border-radius: 3px;
  19. background: red;
  20. }
  21. .b-btn {
  22. display: inline-block;
  23. width: 40px;
  24. height: 40px;
  25. line-height: 40px;
  26. text-align: center;
  27. font-size: 14px;
  28. border-radius: 3px;
  29. background: blue;
  30. }

相关区块

ConfigProvider 通过Context配置Next组件通用的前缀 - 图2

暂无相关区块