日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

让开!!!谁也别拦着我封装React组件!

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让开!!!谁也别拦着我封装React组件! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1簡介

我是歌謠 放棄很容易 但是堅持一定很酷 喜歡我就一鍵三連哈

?2前言

在我們的工作生活中 每次學習一個框架我們就不免要封裝組件 而具備封裝一個完美組件的能力 我稱之為"優秀"

?3準備工作

父組件

<Geyao/>

子組件

import React, { Component } from 'react'; class GeYao extends React.Component {render() {console.log(this, 'this');console.log(this.props, 'props');console.log(this.state, 'state');return <div>我是歌謠</div>;} } export default GeYao;

打印結果

?需求介紹

我們需要做一個類似于這樣的tab切換的組件

備注:一個簡單的區分方法是,this.props 表示那些一旦定義,就不再改變的特性,而 this.state 是會隨著用戶互動而產生變化的特性。

思路

這時候 我們想著這樣的數據格式必須給個數組

然后父組件綁定值

變化1

數據格式

const tabs = [{ key: '', value: '全部' },{ key: '1', value: '已審核' },{ key: '2', value: '未審核' },];

父組件

<GeYao tabs={tabs} />

子組件

import React, { Component } from 'react'; class GeYao extends React.Component {render() {const { tabs = [] } = this.props;console.log(this, 'this');console.log(this.props, 'props');console.log(this.state, 'state');return (<ul>{tabs.map((item, index) => {return <li key={item.key}>{item.name || item.value || ''}</li>;})}</ul>);} } export default GeYao;

運行結果

?圖解示意

?變化2

樣式處理的還是不夠完美 接下來處理樣式

?

?數據格式

const tabs = [{ key: '', value: '全部' },{ key: '1', value: '已審核' },{ key: '2', value: '未審核' },];

父組件

<GeYao tabs={tabs} />

子組件

import React, { Component } from 'react'; class GeYao extends React.Component {render() {const { tabs = [], styles, itemStyles } = this.props;console.log(this, 'this');console.log(this.props, 'props');console.log(this.state, 'state');return (<ulstyle={{display: 'flex',background: '#FFFFFF',paddingLeft: '32px',width: '100%',...styles,}}>{tabs.map((item, index) => {const marginStyle =index === 0? {marginLeft: 0,}: {};return (<listyle={{color: '#1890FF',borderBottom: '2px solid #1890FF',padding: '0px 1.5% 8px',cursor: 'pointer',whiteSpace: 'nowrap',...itemStyles,...marginStyle,}}key={item.key}>{item.name || item.value || ''}</li>);})}</ul>);} } export default GeYao;

運行結果

圖解

?

此時 我想著得寫出一個切換的效果

變化3

??數據格式

const tabs = [{ key: '', value: '全部' },{ key: '1', value: '已審核' },{ key: '2', value: '未審核' },];

父組件

<GeYao tabs={tabs} />

子組件

import React, { Component } from 'react'; class GeYao extends React.Component {constructor(props) {super(props);this.state = {selectTab: props.selectTab || '',};}/*** 切換tab* @param {Boolean} doNot 是否不做任何事情,如果存在此值,不執行父組件切換方法,僅僅刷新樣式*/handleTabClick(key, doNot) {console.log(key, 'key');this.setState({selectTab: key,});}render() {const { selectTab } = this.state;const { tabs = [], styles, itemStyles } = this.props;return (<ulstyle={{display: 'flex',background: '#FFFFFF',paddingLeft: '32px',width: '100%',...styles,}}>{tabs.map((item, index) => {const marginStyle =index === 0? {marginLeft: 0,}: {};return (<lionClick={() => this.handleTabClick(item.key)}style={{color: item.key === selectTab ? '#1890FF' : '#000000A6',borderBottom: item.key === selectTab ? '2px solid #1890FF' : '',padding: '0px 1.5% 8px',cursor: 'pointer',whiteSpace: 'nowrap',...itemStyles,...marginStyle,}}key={item.key}>{item.name || item.value || ''}</li>);})}</ul>);} } export default GeYao;

運行結果

?圖解

?此時 我想加入移入效果 并將數據回調出來

變化4

?

??數據格式

const tabs = [{ key: '', value: '全部' },{ key: '1', value: '已審核' },{ key: '2', value: '未審核' },];

父組件

<GeYao tabs={tabs} onTabSearch={this.handleTabChange} />

子組件

import React, { Component } from 'react'; class GeYao extends React.Component {constructor(props) {super(props);this.state = {selectTab: props.selectTab || '',mouseOverTable: '',};}/*** 切換tab* @param {Boolean} doNot 是否不做任何事情,如果存在此值,不執行父組件切換方法,僅僅刷新樣式*/handleTabClick(key, doNot) {console.log(key, 'key');this.setState({selectTab: key,});if (!doNot) {try {this.props.onTabSearch(key);} catch (error) {}}}render() {const { selectTab, mouseOverTable } = this.state;const { tabs = [], styles, itemStyles } = this.props;return (<ulstyle={{display: 'flex',background: '#FFFFFF',paddingLeft: '32px',width: '100%',...styles,}}>{tabs.map((item, index) => {const marginStyle =index === 0? {marginLeft: 0,}: {};return (<lionMouseOver={() => this.setState({ mouseOverTable: item.key })}onMouseLeave={() => this.setState({ mouseOverTable: 'mouseLeave' })}onClick={() => this.handleTabClick(item.key)}style={{color:item.key === selectTab || item.key === mouseOverTable ? '#1890FF' : '#000000A6',borderBottom: item.key === selectTab ? '2px solid #1890FF' : '',padding: '0px 1.5% 8px',cursor: 'pointer',whiteSpace: 'nowrap',...itemStyles,...marginStyle,}}key={item.key}>{item.name || item.value || ''}</li>);})}</ul>);} } export default GeYao;

運行結果

圖解

?

?則封裝完成

我是歌謠 放棄很容易 但是堅持一定很酷 謝謝你的鼓勵 微信公眾號小歌謠 一起學習 謝謝

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的让开!!!谁也别拦着我封装React组件!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。