React + hooks

90 阅读1分钟

`import React, { useState, useEffect } from 'react'; // import { getList } from '@/services/common'; import { Input, Button, Table, Divider, Modal } from 'antd'; import styles from './index.less';

const Templates: React.FC = () => {

// 定义表单变量
const [dataSource, setDataSource] = useState<API.officialAccountTable>([]);


// 定义表头变量
const [columns, setColumns] = useState<API.officialAccountTableColumns>([]);


// 定义输入框变量
const [inputValue, setInputValue] = useState<string>('')

// 生命周期
useEffect(() => {
    // 一开始就改变值的话不能放在最外层,会导致无限循环,因为一直set会一直render,render后会重新加载又会set
    setColumns([
        {
            title: '姓名',
            dataIndex: 'name',
            key: 'name',
        },
        {
            title: '年龄',
            dataIndex: 'age',
            key: 'age',
        },
        {
            title: '住址',
            dataIndex: 'address',
            key: 'address',
        },
        {
            title: 'Action',
            key: 'action',
            render: (_text: any, record: any) => (
                <span>
                    <a>查看详情</a>
                    <Divider type="vertical" />
                    <a onClick={() => setVisible(() => true)}>删除</a>
                </span>
            ),
        },
    ])

    setDataSource([
        {
            key: '1',
            name: '胡彦斌',
            age: '32',
            address: '西湖区湖底公园1号',
        },
        {
            key: '2',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '3',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '4',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '5',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '6',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '7',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '8',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '9',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '10',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }, {
            key: '11',
            name: '胡彦祖',
            age: '42',
            address: '西湖区湖底公园1号',
        }
    ])

}, [])

// 点击搜索事件
const searchData = () => {
    console.log(inputValue)
}

const [visible, setVisible] = useState<boolean>(false)
console.log('visible', visible)
const handleOk = async () => {
    console.log('OK')
    await setVisible(() => false)
}

const handleCancel = async () => {
    console.log('cancel', visible)
    await setVisible(() => false)
}

return (<div>
    <div>
        <Modal
            title="删除确认"
            visible={visible}
            onOk={handleOk}
            onCancel={handleCancel}
        >
            <p>确定删除该数据吗</p>
        </Modal>
    </div>

    <div>
        模板标题:
        <Input className={styles.searchMargin} size="middle" placeholder="请输入模板标题" onChange={(e) => setInputValue(e.target.value)} />
        <Button type="primary" size="middle" onClick={() => searchData}>
            搜索
        </Button>
    </div>
    <div>
        <Table dataSource={dataSource} columns={columns} style={{ marginTop: 20 }} />;
    </div>
</div>);

}; export default Templates; ` 绑定事件要用箭头函数,否则会自执行