React實現(xiàn)點擊切換組件效果
實現(xiàn)如下組件
組件代碼:
import { SwapOutlined } from "@ant-design/icons" import React, { useState } from "react" import './index.less' interface ISwitchTypeProps { onChange?: (val) => boolean activeKey?: string left: { key: string, text: string } right: { key: string, text: string } } const SwitchType = ({ onChange, left, right, activeKey }: ISwitchTypeProps) => { const [data, setData] = useState({ left, right, activeKey:activeKey||left.key }) const changeActiveData = () => { const activeKey = data.activeKey === left.key ? right.key : left.key const changeData = () => { setData({ left: { ...data.right }, right: { ...data.left }, activeKey }) } if (onChange&&onChange(activeKey)) { changeData() } if (!onChange) { changeData() } } const changeActive = () => { const activeKey = data.activeKey === left.key ? right.key : left.key const changeData = () => { setData({ ...data, activeKey }) } if (onChange&&onChange(activeKey)) { changeData() } if (!onChange) { changeData() } } return <div className="switch-type"> <div className={data.activeKey === data.left.key ? 'type-active' : 'type-data'} onClick={changeActive} key={data.left.key}>{data.left.text}</div> <div className="change-icon" onClick={changeActiveData}><SwapOutlined /></div> <div className={data.activeKey === data.right.key ? 'type-active' : 'type-data'} onClick={changeActive} key={data.right.key}>{data.right.text}</div> </div> } export default SwitchType
index.less樣式文件
.switch-type { display: flex; align-items: center; color: #B9BCC1; .change-icon { border-radius: 2px; background-color: #F1F3F5; width: 24px; height: 24px; line-height: 24px; text-align: center; flex-shrink: 0; margin: 0 8px; color: #555961; cursor: pointer; } .type-data { cursor: pointer; } .type-active { color: #555961; .type-data } }
若想要實現(xiàn)如上效果,點擊不切換左右順序,只切換選中項,把onClick事件統(tǒng)一成changeActive就可以了
import { SwapOutlined } from "@ant-design/icons" import React, { useState } from "react" import './index.less' interface ISwitchTypeProps { onChange?: (val) => boolean activeKey?: string left: { key: string, text: string } right: { key: string, text: string } } const SwitchType = ({ onChange, left, right, activeKey }: ISwitchTypeProps) => { const [data, setData] = useState({ left, right, activeKey: activeKey || left.key }) const changeActive = () => { const activeKey = data.activeKey === left.key ? right.key : left.key const changeData = () => { setData({ ...data, activeKey }) } if (onChange && onChange(activeKey)) { changeData() } if (!onChange) { changeData() } } return <div className="switch-type"> <div className={data.activeKey === data.left.key ? 'type-active' : 'type-data'} onClick={changeActive} key={data.left.key}>{data.left.text}</div> <div className="change-icon" onClick={changeActive}><SwapOutlined /></div> <div className={data.activeKey === data.right.key ? 'type-active' : 'type-data'} onClick={changeActive} key={data.right.key}>{data.right.text}</div> </div> } export default SwitchType
到此這篇關(guān)于React實現(xiàn)點擊切換組件效果的文章就介紹到這了,更多相關(guān)React切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React中useEffect與生命周期鉤子函數(shù)的對應(yīng)關(guān)系說明
這篇文章主要介紹了React中useEffect與生命周期鉤子函數(shù)的對應(yīng)關(guān)系說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09React組件內(nèi)事件傳參實現(xiàn)tab切換的示例代碼
本篇文章主要介紹了React組件內(nèi)事件傳參實現(xiàn)tab切換的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07詳解react native頁面間傳遞數(shù)據(jù)的幾種方式
這篇文章主要介紹了詳解react native頁面間傳遞數(shù)據(jù)的幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11Mobx實現(xiàn)React?應(yīng)用的狀態(tài)管理詳解
這篇文章主要為大家介紹了Mobx?實現(xiàn)?React?應(yīng)用的狀態(tài)管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12