joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

tsx 子组件、tsx 使用class 方式

  • tsx 组件代码
import { defineComponent, PropType, h, computed, ref, watch } from 'vue';
import type { Reactive, Ref } from 'vue';
import styles from '../scss/child.module.scss';

// 函数局部组件实现
const myDiv = (param1: Ref, param2: Reactive<{ num: number }>) => {
    return (
        <div>
            <div>{param1.value}</div>
            <div>{param2.num}</div>
        </div>
    );
};

export default defineComponent({
    props: {},
    setup(props) {
        // ref 数据传入子组件
        const myData1 = ref<number>(23);

        // reactive 数据传入子组件
        const myObj: Reactive<{ num: number }> = reactive({
            num: 1
        });

        function myClick() {
            console.log('myClick');
            myData1.value++;

            myObj.num++;
        }

        const mycls = {
            color: 'red'
        };

        return () => (
            <div>
                {/* 动态style使用方式 */}
                <div class="abc" style={mycls}>
                    sdkfjskf
                </div>
                <div>{myDiv(myData1, myObj)}</div>
                {/* ref value读取方式 动态class方式 */}
                <div class={styles.red}>{myData1.value}</div>
                {/* reactive对象数据读取方式 */}
                <div>{myObj.num}</div>
                <div>
                    {/* 事件触发方式 */}
                    <button onClick={() => myClick()}>btn</button>
                </div>
            </div>
        );
    }
});

  • child.module.scss

注意 要加入module 命名,才能类似vue的scoped效果,局部样式,而不是全局样式

.red{
    color: red;
}
posted on 2024-09-09 21:33  joken1310  阅读(7)  评论(0编辑  收藏  举报