使用ant-design组件里面Input,既能传入更改的值,又能编辑该输入框

本文介绍了如何在React应用中使用Ant Design的Input组件实现从父组件向子组件传递值,并允许子组件中的Input输入框进行编辑。通过设置Input的defaultValue属性并配合key值,实现了父组件和子组件间的数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用ant-design组件里面Input时,遇到以下情况:在父组件有个input框,子组件也有一个input框,点击父组件的传入按钮,值能够传入子组件中,且子组件里的input框的里面的值能够编辑
父组件
在这里插入图片描述

import React, { Component } from "react"
import { Input, Modal, Button } from 'antd';
import Toast from './toast'

class Test extends React.Component {
    constructor() {
        super()
        this.state = {
            jobNumber: "",
            visible: false,
            
        }
    }

    handleNumber = (e) => {
        console.log(e.target.value)
        this.setState ({
            jobNumber: e.target.value
        })
    }
    
    handleChangeValue = (e) => {
        this.setState({
            visible: true,
        });
    };

    handleOk = e => {
        console.log(e);
        this.setState({
            visible: false,
        });
    };

    handleCancel = e => {
        console.log(e);
        this.setState({
            visible: false,
        });
    };

    render() {
        return (
            <div>
               
                <Input placeholder="请输入" style={{ width: "150px" }} onChange={this.handleNumber} value={this.state.jobNumber}/>
               
                <button type="primary" onClick={this.handleChangeValue}>
                   传值
                </button>
                <Modal
                    title="Basic Modal"
                    visible={this.state.visible}
                    onOk={this.handleOk}
                    onCancel={this.handleCancel}
                >
                   <Toast jobNumber={this.state.jobNumber} ></Toast>
                </Modal>
            </div>
        )
    }
}

export default Test

子组件
在这里插入图片描述

import React, { Component } from "react"
import { Input, Modal, Button } from 'antd';


class Toast extends React.Component {
    constructor() {
        super()
        this.state = {
            jobNumber2: "",
        }
    }
    jobNumber2

    componentDidMount = () => {
        console.log(this.props.jobNumber)
        // this.setState({
        //     jobNumber2: this.props.jobNumber
        // })
        this.jobNumber2 = this.props.jobNumber
    }

    componentWillReceiveProps = (nextProps) => {
        console.log(nextProps.jobNumber)
        // this.setState({
        //     jobNumber2: nextProps.jobNumber
        // })
        this.jobNumber2 = nextProps.jobNumber
    }

    handleNumber2 = (e) => {
        console.log(e.target.value)
        this.setState({
            jobNumber2: e.target.value
        })
    }


    render() {
        return (
            <div>
                <Input placeholder="请输入"
                    style={{ width: "150px" }}
                    onChange={this.handleNumber2}
                    defaultValue={this.jobNumber2}
                    key={this.jobNumber2} />
            </div>
        )
    }
}

export default Toast

主要使用Input自带的defaultValue属性,然后添加一个key值即可.

### 解决方案 为了实现 `ant-design-vue` 的数字输入框向上取整的功能,可以自定义处理函数来控制数的变化逻辑。具体来说,在监听到输入变化时,通过 JavaScript 提供的 Math.ceil 方法对输入进行处理。 #### 自定义 InputNumber 组件行为 在 Vue 3 和 Composition API 下面创建一个名为 `CeilInputNumber.vue` 的新组件: ```vue <template> <a-input-number :value="ceilValue" @change="handleChange"/> </template> <script setup> import { ref, watch } from 'vue'; const props = defineProps({ value: { type: Number, default: null } }); // 定义内部使用的变量 ceilValue 并初始化为传入的 prop let ceilValue = ref(props.value); watch(() => props.value, (newValue) => { // 当父级传递的新发生变化时更新本地状态 ceilValue.value = newValue !== undefined && newValue !== null ? Math.ceil(newValue) : null; }); function handleChange(value) { // 处理改变事件并应用向上取整操作 const updatedValue = value === undefined || value === '' ? null : Math.ceil(Number(value)); // 更新本地状态以及通知父组件新的 ceilValue.value = updatedValue; emit('update:value', updatedValue); } // 创建emit对象用于向上传递事件 const emit = defineEmits(['update:value']); </script> ``` 此代码片段展示了如何构建一个新的封装好的 `<a-input-number>` 输入控件实例,该实例会在每次更改时自动调用 `Math.ceil()` 函数将任何浮点数转换为其最接近的大于等于它的整数[^1]。 #### 使用 CeilInputNumber 组件使用这个定制化的组件,只需像平常一样导入它,并将其放置在模板中的适当位置即可。确保已经按照说明正确安装和配置了 Ant Design Vue 库及其样式资源[^2]。 ```html <!-- ParentComponent.vue --> <template> <!-- ...其他HTML结构... --> <CeilInputNumber v-model:value="numberField"></CeilInputNumber> <!-- ...更多HTML内容... --> </template> <script setup> import CeilInputNumber from './components/CeilInputNumber.vue'; import { ref } from 'vue'; let numberField = ref(0); // 初始化默认为零或其他所需初始 </script> ``` 这样就可以实现在用户交互过程中始终显示经过向上取整后的结果给最终用户的体验了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值