国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React Antd可編輯單元格,非官網(wǎng)寫(xiě)法,不使用可編輯行和form驗(yàn)證

這篇具有很好參考價(jià)值的文章主要介紹了React Antd可編輯單元格,非官網(wǎng)寫(xiě)法,不使用可編輯行和form驗(yàn)證。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

antd3以上的寫(xiě)法乍一看還挺復(fù)雜,自己寫(xiě)了個(gè)精簡(jiǎn)版

沒(méi)用EditableRow+Cell的結(jié)構(gòu),也不使用Context、高階組件等,不使用form驗(yàn)證

最終效果:

React Antd可編輯單元格,非官網(wǎng)寫(xiě)法,不使用可編輯行和form驗(yàn)證,前端,react,antd,可編輯單元格

React Antd可編輯單元格,非官網(wǎng)寫(xiě)法,不使用可編輯行和form驗(yàn)證,前端,react,antd,可編輯單元格

class EditableCell extends React.Component {
    state = {
        editing: false
    };
    toggleEdit = () => {
        const editing = !this.state.editing
        this.setState({ editing }, () => {
            if (editing) {
                this.input.focus()
            }
        })
    };
    save = e => {
        const { record, handleSave } = this.props;
        this.toggleEdit();
        handleSave(record, e.target.value)

    };  // save主要處理兩件事,一是切換editing狀態(tài),二是提交更新的數(shù)據(jù)
    render() {
        const { children } = this.props
        const { editing } = this.state;
        return editing ? (
            <Input defaultValue={children} ref={node=>(this.input=node)} onPressEnter={this.save} onBlur={this.save} />
        ) : (
            <span>{children}<Icon type="edit" theme='twoTone' style={{marginLeft: 10}} onClick={this.toggleEdit} /></span>
            )
    }
};

最后使用的時(shí)候直接在column元素的render里面<EditableCell> </EditableCell>就好啦, props一定要傳處理保存修改的方法

render: (text, record) => {
    return (<EditableCell handleSave={handleModifyNote} record={record}>{text}</EditableCell>) //記得傳props
    }

現(xiàn)在這個(gè)可編輯單元格組件在鼠標(biāo)失焦或者回車(chē)后,列數(shù)據(jù)會(huì)變回修改前的數(shù)據(jù),在state里面加個(gè)text,把最后顯示的 {children} 換成 {text} 就可以。

該組件也許很多頁(yè)面都會(huì)使用,單獨(dú)放在一個(gè)文件里再引入會(huì)優(yōu)雅很多:

import React from 'react';
import {Input, Icon} from 'antd';

class EditableCell extends React.Component {
    state = {
        editing: false,
        text: this.props.children
    };
    toggleEdit = () => {
        const editing = !this.state.editing
        this.setState({ editing }, () => {
            if (editing) {
                this.input.focus()
            }
        })
    };
    save = e => {
        const { record, handleSave } = this.props;
        this.setState({text: e.target.value});
        this.toggleEdit();
        handleSave(record, e.target.value)

    };
    render() {
        const { editing, text } = this.state;
        return editing ? (
            <Input defaultValue={text} ref={node=>(this.input=node)} onPressEnter={this.save} onBlur={this.save} />
        ) : (
            <span>{text}<Icon type="edit" theme='twoTone' style={{marginLeft: 10}} onClick={this.toggleEdit} /></span>
            )
    }
};

export default EditableCell;

引入的時(shí)候:

import { EditableCell } from '../EditableCell'

全部頁(yè)面index.jsx大概是這樣的文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-698533.html

import React, { useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Card, Input, Select, Row, message, Col, Table, Button, Icon, Upload, Form, DatePicker } from 'antd';
import { connect } from 'dva';
import download from '@/utils/download';
import styles from './style.less';

const { Option } = Select;

class EditableCell extends React.Component {
    state = {
        editing: false
    };
    toggleEdit = () => {
        const editing = !this.state.editing
        this.setState({ editing }, () => {
            if (editing) {
                this.input.focus()
            }
        })
    };
    save = e => {
        const { record, handleSave } = this.props;
        this.toggleEdit();
        handleSave(record, e.target.value)

    };
    render() {
        const { children } = this.props
        const { editing } = this.state;
        return editing ? (
            <Input defaultValue={children} ref={node=>(this.input=node)} onPressEnter={this.save} onBlur={this.save} />
        ) : (
            <span>{children}<Icon type="edit" theme='twoTone' style={{marginLeft: 10}} onClick={this.toggleEdit} /></span>
            )
    }
};

const Aabbb = props => {
    const { form, dispatch, dataLoading } = props;
    const { getFieldDecorator } = form;
    const { pageInfo, res }  = props;
    const formItemLayout = {
        labelCol: { span: 8 },
        wrapperCol: { span: 16 },
    };
    const columns = [
        { title: '序號(hào)', dataIndex: 'id', align: 'center', width: 80, fixed: 'left', render: (text, record, index) =>
            (<span>{(pageInfo.current - 1) * pageInfo.pageSize + index + 1}</span>)
        },
        ...
        { title: '結(jié)果', dataIndex: 'results', align: 'center', render: (text, record) => (
            <Select defaultValue={text} className={styles.tableSelection} onChange={value => handleModifyResult(value, record)}>
                <Option value="正常">正常</Option>
                <Option value="異常">異常</Option>
            </Select>
        )},
        { title: '備注', dataIndex: 'notes', align: 'center', width: 120, render: (text, record) => {
            return (<EditableCell handleSave={handleModifyNote} record={record}>{text}</EditableCell>)
        }}
    ];
    const handleModifyNote = (record, value) => {
        console.log('save', {...record, notes: value})
        dispatch({})
    };
    const handleModifyResult = (value, record) => {
        dispatch({})
        console.log({...record, inspectionResults: value});
    };
    
    
    useEffect(() => {
        
    }, []);
    const queryData = () => {}
        
    return (
        <PageHeaderWrapper>
            <Card>
                <Form horizontal="true">
                    <Row>
                        <Col span={8}>
                            ...
                        </Col>   
                    </Row>
                    <Row>
                        ...
                    </Row>
                </Form>
                <Table
                    columns={columns}
                    loading={dataLoading}
                    dataSource={res}
                    rowKey={(record,index)=>index}
                    pagination={}
                    onChange={}
                    />
            </Card>
        </PageHeaderWrapper>
    );
}

export default connect(({ aabbb, loading }) => ({
    res: aabbb.res,
    dataLoading: loading.effects['aabbb/QueryAabbb'],
}))(Form.create()(Aabbb));

到了這里,關(guān)于React Antd可編輯單元格,非官網(wǎng)寫(xiě)法,不使用可編輯行和form驗(yàn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React使用antd的圖片預(yù)覽組件,點(diǎn)擊哪個(gè)圖片就預(yù)覽哪個(gè)的設(shè)置

    React使用antd的圖片預(yù)覽組件,點(diǎn)擊哪個(gè)圖片就預(yù)覽哪個(gè)的設(shè)置

    使用了官方推薦的相冊(cè)模式的預(yù)覽,但是點(diǎn)擊預(yù)覽之后,每次都是從圖片列表的第一張開(kāi)始預(yù)覽,而不是點(diǎn)擊哪張就從哪張開(kāi)始預(yù)覽: 所以這里我就封裝了一下,對(duì)初始化預(yù)覽的列表進(jìn)行了邏輯處理: 當(dāng)點(diǎn)擊開(kāi)始預(yù)覽的時(shí)候,要找到當(dāng)前圖片在預(yù)覽圖列表中的索引,然后設(shè)

    2024年02月13日
    瀏覽(30)
  • react使用antd的table組件,實(shí)現(xiàn)點(diǎn)擊彈窗顯示對(duì)應(yīng)列的內(nèi)容

    react使用antd的table組件,實(shí)現(xiàn)點(diǎn)擊彈窗顯示對(duì)應(yīng)列的內(nèi)容

    特別提醒:不能在table的columns的render里面設(shè)置彈窗組件渲染,因?yàn)檫@會(huì)導(dǎo)致彈窗顯示的始終是最后一行的內(nèi)容,因?yàn)檫@樣渲染的結(jié)果是每一行都會(huì)重新渲染一遍這個(gè)彈窗并且會(huì)給傳遞一個(gè)content的值,渲染到最后一行的時(shí)候,就傳遞的是最后一行的值。這就導(dǎo)致你有多少行數(shù)據(jù)

    2024年02月12日
    瀏覽(40)
  • React18.x + i18next + antd 國(guó)際化正確使用姿勢(shì)及避坑指南

    React18.x + i18next + antd 國(guó)際化正確使用姿勢(shì)及避坑指南

    如果你使用這個(gè)教程還不能夠解決你的問(wèn)題的話(huà),直接私信我,免費(fèi)一對(duì)一給你解決。 具體的創(chuàng)建方法大家參考vite官方文檔,大概的操作如下,如果需要更詳細(xì)的,大家去自行搜索即可 因?yàn)槲疫@里使用的是ts版本,所以,你自己看著辦吧。 其中 i18next-browser-languagedetector i1

    2024年02月05日
    瀏覽(30)
  • 單元測(cè)試gtest的安裝與使用方法【結(jié)合官網(wǎng)的sample】

    單元測(cè)試gtest的安裝與使用方法【結(jié)合官網(wǎng)的sample】

    gtest單元測(cè)試是Google的一套用于編寫(xiě) C++測(cè)試的框架 ,可以運(yùn)行在很多平臺(tái)上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架構(gòu)。支持很多好用的特性,包括自動(dòng)識(shí)別測(cè)試、豐富的斷言、斷言自定義、死亡測(cè)試、非終止的失敗、生成XML報(bào)告等等。 好的測(cè)試應(yīng)該有下面的這

    2024年02月10日
    瀏覽(21)
  • 使用 create-react-app 搭建項(xiàng)目ts+less+antd+redux+router+eslint+prettier+axios

    使用 create-react-app 搭建項(xiàng)目ts+less+antd+redux+router+eslint+prettier+axios

    當(dāng)前市面上有很多前端框架或者模板、如:umi、dva、antd-design-pro、create-react-app 等一些框架或者模板。 create-react-app 是 react 官方提供的,相對(duì)來(lái)說(shuō)比較干凈一些。 此項(xiàng)目是在 create-react-app 的基礎(chǔ)上進(jìn)行搭架、項(xiàng)目采用 ts 語(yǔ)法 項(xiàng)目整體上會(huì)添加上以下功能: 完整項(xiàng)目代碼 傳

    2024年02月03日
    瀏覽(29)
  • EXCEL中點(diǎn)擊單元格,所在行和列都改變顏色

    EXCEL中點(diǎn)擊單元格,所在行和列都改變顏色

    在日常工作中,尤其是辦公室工作人群,嘗嘗需要處理大量的數(shù)據(jù),在對(duì)數(shù)據(jù)進(jìn)行修改時(shí),時(shí)長(zhǎng)發(fā)生看錯(cuò)行的事情,導(dǎo)致數(shù)據(jù)越改越亂,因此,我常用的一種方法就是選中單元格時(shí),所在行、列標(biāo)記為特殊顏色,下面就是我常用的標(biāo)記方法,僅供參考,如大家還有其他方法,

    2024年02月10日
    瀏覽(25)
  • Element UI Table實(shí)現(xiàn)可編輯表格+校驗(yàn)(行和行,列和列)

    Element UI Table實(shí)現(xiàn)可編輯表格+校驗(yàn)(行和行,列和列)

    Table: TablePersonPicker: 輸入校驗(yàn): 效果圖: ? ?

    2024年02月15日
    瀏覽(21)
  • react-antd

    封裝了一些通用的界面功能效果的組件, 簡(jiǎn)化開(kāi)發(fā)編碼 流行的React UI 組件庫(kù) 國(guó)內(nèi): Ant Design https://ant-design.antgroup.com/index-cn 國(guó)外: Material UI https://www.mdui.org/design/ index.ts App.tsx 問(wèn)題: ? antd默認(rèn)的主體顏色是藍(lán)色, 而我們的可以自定義任意的顏色 解決: 使用 ConfigProvider 來(lái)解決 在

    2024年02月13日
    瀏覽(63)
  • react antd 樣式修改

    react antd 樣式修改

    最近在做一個(gè)大數(shù)據(jù)的大屏ui更改,使用的是antd,需要根據(jù)ui稿調(diào)很多的antd組件樣式 特做一個(gè)樣式修改記錄,也給需要的人一些幫助 我們修改的有以下樣式: ? ? ? ? ? ? 如何改呢: ?

    2024年02月12日
    瀏覽(22)
  • react antd動(dòng)態(tài)樣式實(shí)現(xiàn)

    react antd動(dòng)態(tài)樣式實(shí)現(xiàn)

    使用a組件的背景: 想給業(yè)務(wù)流量加標(biāo)簽,使用動(dòng)態(tài)樣式后最終實(shí)現(xiàn)如下: ?如果不使用動(dòng)態(tài)樣式時(shí): 當(dāng)a組件展示的變量為null或者空時(shí),頁(yè)面樣式如下: ?

    2024年02月11日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包