基于组件开发的 YIS,样式分为 YIS 组件样式,自封装组件样式,扩展主题样式。
theme
方式引用样式亦可扩展自定义组件。 ···
|- src
|- components
// 项目级别组件 开放 brwoser 能力,样式维护在组件命名的文件夹下面
|- test
|- index.js
|- browser.js
|- main.css
|- pages
|-home
|- components
// 页面级别的组件可以将组件 js 文件维护在页面文件夹 components 下面,样式文件维护在页面的 main.css 文件中既可。
|- menu.js
|-index.js
|-index.skel
|-main.css
|- themes
// 用于扩展 YIS 组件样式主题,该文件应与 YIS 组件同名并引入 YIS 组件的 css
|- button.css
···
···
|- src
|- components
// 项目级别组件 开放 brwoser 能力,样式维护在组件命名的文件夹下面
|- test
|- index.js
|- browser.js
|- main.css
|- pages
|-home
|- components
// 页面级别的组件可以将组件 js 文件维护在页面文件夹 components 下面,样式文件维护在页面的 main.css 文件中既可。
|- menu.js
|-index.js
|-index.skel
|-main.css
|- themes
// 用于扩展 YIS 组件样式主题,该文件应与 YIS 组件同名并引入 YIS 组件的 css
|- button.css
···
基于 css-module 开发样式,在 css 文件中完成样式文件编写后引入相应的 js 文件中。
@import '@qnpm/yis/components/reset.css';
.options{
···
}
.container{
···
}
.container{
···
}
将 css 文件引入 js 文件后,在 js 文件中获得的是一个对象,对象的 key 为开发者定义的类名,对象的 value 为经 css-module 处理后的类名。
import { View, Animate, Button, Page } from "@qnpm/yis/components";
import Test from '../../components/test';
import { registerPage, PageCore } from "@qnpm/yis";
import styles from "./main.css";
import classnames from "classnames";
export default class Animatedemo extends PageCore { render() {
return (
<Page>
<div className={styles.options}>
···
</div>
<div className={styles.container}>
···
</div>
<div className={styles.container}>
···
</div>
</Page>
);
}
}
对于复用性组件建议以这种方式引入样式。 将引入样式对象作为组件的 theme 的默认值,theme 是 组件的实例属性,render 时取用 this.theme
上的属性获取类名。YIS Component 基类为组件提供了将 props.theme 更新到 this.theme 上的能力,因此当复用组件时需要新的主题只需要在 props 中传入自定义的 theme 文件(css 文件)即可。
import { Component } from '@qnpm/yis'
import { View } from '@qnpm/yis/components';
import styles from '../main.css';
export default class List extends Component {
displayName= "List";
theme = styles;
render() {
return (
<div className={this.theme.list}>
···
</div>
)
}
}
当然你也可以通过上述方式封装一个固定 theme 的高阶组件,供特定类型的组件使用。