React 高亮按钮封装

这篇博客详细介绍了如何创建一个React组件`StateButton`,该组件根据鼠标悬停状态改变图片和文字颜色。代码展示了如何从props接收默认值并根据props更新state,以及在鼠标悬停和离开时触发状态变更的方法。
摘要由CSDN通过智能技术生成

在这里插入图片描述
导入

                  <StateButton imgt={require('../../img/ask/icon_mb_t.png')}
                        imgf={require('../../img/ask/icon_mb_f.png')}
                        text="下载模板" colort='#46C066FF' colorf='#585E6EFF'></StateButton>

代码

import React, { Component } from 'react'

import imgDefultT from '../img/ask/icon_mb_t.png'
import imgDefultF from '../img/ask/icon_mb_f.png'
export class StateButton extends Component {
    constructor(props) {
        super(props)
        this.state = {
            text: '',
            colort: '',
            colorf: '',
            imgf: imgDefultF,
            imgt: imgDefultT,
            isOver: false
        }
    }

    componentWillMount() {
        console.log(this.props);
        if (this.props) {
            this.setState({
                text: this.props.text ? this.props.text : '按钮',
                colort: this.props.colort ? this.props.colort : '#fff',
                colorf: this.props.colorf ? this.props.colorf : '#000',
                imgf: this.props.imgf ? this.props.imgf : imgDefultF,
                imgt: this.props.imgt ? this.props.imgt : imgDefultT,
            })
        }
    }

    render() {
        const { text, colort, colorf, isOver, imgf, imgt } = this.state
        return (
            <div style={{ alignItems: 'center', padding: '5px', display: 'flex', width: '100px', fontSize: "12px" }}
                onMouseOver={() => { this.mouseOverEvent() }}
                onMouseOut={() => { this.mouseOutEvent() }}>
                <img src={isOver ? imgt : imgf} style={{ marginRight: '8px' }} />
                <span style={{ color: isOver ? colort : colorf }}>{text}</span>
            </div>
        )
    }

    // 鼠标焦点高亮显示
    mouseOverEvent() {
        this.setState({
            isOver: true
        })
    }

    // 鼠标焦点高亮取消
    mouseOutEvent() {
        this.setState({
            isOver: false
        })
    }
}

export default StateButton

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魑魅魍魉9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值