用react 构建电子表格(4)--react.js,动态改变css样式

 

单元格内如如何描述呢:内容可能是文本,有可能是公式,我们先考虑文本情况:

export default class CommData extends Component {
    constructor(props) {
        super(props)
        this.state = {
            text:"",  //文本
            dataType:"",
            note:""
        }
    }
    render() {
        return (
            this.state.text
        )
    }
}

整个数据流转方向还是从table到cell,不过,cell组件相应修改:

.....
    getCommData(text) {
        return <CommData  text={text}/>;
    }
.......   
 render() {
       return (
            <td  className="ttd"
                 onClick={() => this.clicked()}
                 onDoubleClick={e => this.doubleClicked(e)}
            >
                {this.getCommData(this.state.commData)}
            </td>
        )
    }

样式内容比较多,目前只考虑对齐、字体、边框

字体:目前涉及如下属性:

风格(CellFontStyle):宋体、仿宋等

字号(CellFontSize):字体大小

字体序号(cellFont):粗体、斜体、下划线三类

边框:分4边控制,简化一下,每边就s

react当中,动态改变css样式

以斜体、正常为例

1、定义css样式文件样式

2、render中定义对应的变量

3.td 元素根据对应的变量,加载适当的样式

4、样式变量的值如何来,当然来自state中的数据,

5、根据state当中的值,动态修改变量的值

也可以说:1state接受样式数据,2)render中定义变量,表示用什么样式classname,3)根据传入的值,动态改变变量4)td上挂上代表classname的变量   5)当然,必须有配套的css

1定义css样式

.cell_font-style_normal{
    font-style:normal;
}
.cell_font-style_italic{
    font-style:italic;
}

2、定义对应变量

    render() {
        ......
       let cell_font_style_css= 'font-sytle_normal'

3.td 元素根据对应的变量,加载适当的样式 

        return (
            <td  className="ttd"
                 onClick={() => this.clicked()}
                 onDoubleClick={e => this.doubleClicked(e)}
                 className={["ttd", alignCss,cell_font_family_css,cell_font_size_css,
                     cell_font_weight_css, cell_font_style_css].join(' ')}
            >
                {this.getCommData(this.state.commData)}
            </td>
        )

4、样式数据来源是state当中

5、根据state当中的值,动态修改变量的值。

        switch(this.state.cell_font_css[3]){
            case 'font-sytle_normal':
                cell_font_style_css='cell_font-style_normal'
                break;
            case 'font-sytle_bold':
                cell_font_style_css='cell_font-style_italic'
                break;
            default:
                cell_font_style_css='cell_font-style_normal'
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值