[FE] hello-styled-components

1. 项目初始化

npm init

2. 安装开发环境依赖

npm install --save-dev \
babel-core \
babel-loader \
babel-preset-es2015 \
babel-preset-react \
webpack

3. 安装模块依赖

npm install --save \
react \
react-dom \
styled-components

4. 新建./.babelrcwebpack.config.js两个文件

(1).babelrc

{
    "presets": [
        "es2015",
        "react"
    ]
}

(2)webpack.config.js

const path = require('path');

module.exports = {
    entry: {
        index: './index.jsx'
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js',
        libraryTarget: 'umd'
    },
    module: {
        loaders: [{
            test: /.jsx$/,
            loader: 'babel-loader'
        }]
    }
};

5. 例子

(1)目录结构

+ dist    //自动生成的目录
+ node_modules    //自动生成的目录
.babelrc
index.html
index.jsx
package-lock.json    //自动生成的文件
package.json
webpack.config.js

(2)index.jsx

import React from 'react';
import ReactDOM from 'react-dom';

import styled from 'styled-components';

// 1. 新建一个带样式的组件
const Title = styled.div`
    font-size: 1.5em;
    color: ${props => props.primary ? 'red' : 'black'}
`;

// 2. 给已有组件添加样式
const Link = ({ className, children }) => (
    <a className={className}>
        {children}
    </a>
)
const StyledLink = styled(Link) `
    font-size: 1.5em;
    color: ${props => props.primary ? 'red' : 'black'}
`;

ReactDOM.render(
    <div>
        <Title primary>Title</Title>
        <StyledLink primary>StyledLink</StyledLink>
    </div>,
    document.getElementById('page')
);

注:
(1)styled-components使用了tagged template literals,来处理样式表。

(2)使用styled-components可以直接创建一个带样式的React组件。
还可以为已有组件添加样式,组件中使用className来获取所添加的样式。

(3)样式表模板字符串中,所出现的函数props => ...,会自动使用组件的属性进行调用。所以,以下两种用法的作用效果是相同的,

color: ${props => props.primary ? 'red' : 'black'}
${props => props.primary ? 'color: red' : 'color: black'}

本例中,在创建Title组件时,使用props.primary获取了组件<Title primary>Title</Title>primary属性值。


参考

styled-components.com
ECMAScript 2017 Language Specification: Tagged Templates
MDN: Tagged template literals

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下载安装搭建环境 可以选npm安装,或者简单下载一个开发版的vue.js文件 浏览器打开加载有vue的文档时,控制...
    冥冥2017阅读 6,078评论 0 42
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,071评论 4 129
  • 大雨滂沱路上行人行色匆匆天上人间风雨共同车水马龙看遍红尘世间烟火黄昏时分雨落而至苍茫天地一片水汽依稀奈何茂林修竹郁...
    小倩星阅读 481评论 2 64
  • 然后,看着眼前的男人,干下一瓶又一瓶。 觥筹间,女人微抬眼睑; 很微妙的不忍,却伸不出手拦下酒杯; “来,干干干~...
    蜂蜜蛋卷夹心阅读 187评论 0 0