React+antd实现可编辑单元格,非官网写法,不使用可编辑行和form验证

本文介绍了如何在不使用Ant Design的EditableRow和Cell以及Context、高阶组件和form验证的情况下,创建一个可编辑单元格的精简版。通过在column元素的render中使用<EditableCell>,并在props中传递保存修改的方法,可以实现简单的可编辑单元格功能。当单元格失去焦点或按下回车键后,数据将更新。为了防止数据回滚,可以在state中添加一个text字段,并用它替换{children}来显示最新内容。为了代码复用,建议将此组件单独存放在一个文件中,然后在需要的页面中导入。
摘要由CSDN通过智能技术生成

antd3以上的写法乍一看还挺复杂,自己写了个精简版

没用EditableRow+Cell的结构,也不使用Context、高阶组件等,不使用form验证

最终效果:

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状态,二是提交更新的数据
    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}} onCl
React项目中使用Ant Design (antd) 库可以常方便地实现标签页(Tabs)和表单(Form)组件。以下是实现这些功能的基本步骤和代码示例: 1. **实现Tabs(标签页)**: 使用antd的`Tabs`组件,你可以快速创建一个标签页布局。你需要先导入`Tabs`组件,并在你的React组件中使用它。 ```jsx import { Tabs } from 'antd'; const { TabPane } = Tabs; class MyTabsComponent extends React.Component { render() { return ( <Tabs type="card"> <TabPane tab="Tab 1" key="1"> Content of Tab 1 </TabPane> <TabPane tab="Tab 2" key="2"> Content of Tab 2 </TabPane> </Tabs> ); } } ``` 2. **实现Form(表单)**: 对于表单,你需要使用antd的`Form`、`Input`等表单控件组件。创建一个表单首先需要导入`Form`组件,并设置表单的`initialValues`和`onFinish`事件处理函数。 ```jsx import { Form, Input, Button, message } from 'antd'; const { Item } = Form; class MyFormComponent extends React.Component { handleSubmit = (values) => { console.log('Received values of form: ', values); // 处理表单提交逻辑 message.success('Submit successfully!'); } render() { return ( <Form onFinish={this.handleSubmit}> <Item name="username" rules={[{ required: true, message: 'Please input your username!' }]}> <Input placeholder="Username" /> </Item> <Item name="password" rules={[{ required: true, message: 'Please input your password!' }]}> <Input.Password placeholder="Password" /> </Item> <Item> <Button type="primary" htmlType="submit"> Submit </Button> </Item> </Form> ); } } ``` 3. **表单提交**: 表单提交通常通过绑定`onFinish`事件来实现。在该事件处理函数中,你可以获取到用户输入的数据,并进相应的逻辑处理,比如发送请求到服务器。 在上述示例中,`handleSubmit`方法会在表单提交时被调用,可以在这里添加你的提交逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值