Reac--组件动态的类名书写

前言

在实际应用中,有的时候需要根据变量动态调整元素样式。

书写

<Button
 size="xs"
 className={`bg-[#21242a] text-xs mt-1 mb-1 
 ${isSelecting?'w-20':"w-full"}`}
 onClick={() => {
      setIsSelecting(!isSelecting);
  }}
  >
{isSelecting ? "Done" : "Edit track"}
 className={`bg-[#21242a] text-xs mt-1 mb-1  ${isSelecting?'w-20':"w-full"}`}

解读语法:

1.在 JSX 中,最外层的 {} 被用来嵌入 JavaScript 表达式。这是 React 和 JSX 的一个特性,允许你将动态内容如变量、函数调用、条件表达式等插入到渲染的输出中。
2.中间使用了ES6的模版字符,在模板字符串中,可以用 ${} 来包裹一个 JavaScript 表达式,该表达式的结果将被转换为字符串并插入到模板字符串的相应位置。

在 umi/dva 的开发中,`model` 文件用于定义状态(state)、订阅(subscribers)、动作(reducers)以及副作用(effects)。为了同时支持 React 函数组件使用 `useModel()` 和 React组件使用 `connect`,我们需要确保 `model` 中的状态和订阅是可访问的,并且动作(reducers)和副作用(effects)可以被触发。 下面是一个基本的 `model` 文件的写法示例: ```javascript // model.js import { types } from 'mobx-state-tree'; export default { namespace: 'count', state: { number: 0, }, reducers: { add(state) { return { ...state, number: state.number + 1 }; }, minus(state) { return { ...state, number: state.number - 1 }; }, }, effects: { *asyncAdd(action, { call, put }) { yield call(delay, 1000); yield put({ type: 'add' }); }, }, }; // count.js import React, { useState, useEffect } from 'react'; import { useModel } from 'dva'; const Count = () => { const [state, dispatch] = useModel(state => [state.count, { add: () => dispatch({ type: 'add' }) }]); useEffect(() => { // 如果需要,这里可以发起副作用操作 // 可以通过model中的effects来处理异步操作 }, []); return ( <div> <p>Count: {state.number}</p> <button onClick={() => dispatch({ type: 'minus' })}>-</button> </div> ); }; // App.js import React from 'react'; import { connect } from 'dva'; import Count from './components/Count'; const App = ({ count }) => { return ( <div> <Count /> </div> ); }; const mapStateToProps = state => ({ count: state.count, }); export default connect(mapStateToProps)(App); ``` 在这个示例中,我们定义了一个包含 `namespace`、`state`、`reducers` 和 `effects` 的模型。在函数组件 `Count` 中,我们使用 `useModel` 钩子来获取状态和派发动作。在类组件 `App` 中,我们使用 `connect` 高阶组件来将状态映射到组件的 props 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值