antd4.x版本解决父组件传递给子组件值的时候动态显示initialValue值的问题

例如,我要从父组件给子组件传递一个字符串,然后子组件显示出来,按照3.x的版本的写法无法更新显示,这是因为initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,不能直接设置initialValue的值来改变。但是我们可以通过Form的resetFields()方法来解决这个问题,this.formRef.current.resetFields(),在子组件定义formRef = React.createRef(),在componentDidUpdate函数中调用就可以完美解决,下面上代码。父组件代码

import React, {Component} from 'react';
import { Card, Table, Button,message,Modal } from 'antd';
import {PlusOutlined,ArrowRightOutlined} from '@ant-design/icons';
import LinkButton from "../../components/link-button";
import {reqCategorys} from "../../api";
import AddForm from "./add-form";
import UpdateForm from './update-form'/*商品分类*/
export default class Category extends Component {state = {categorys: [],//一级分类列表subCategorys: [],//二级分类列表loading: false,parentId: '0',parentName: '',showStatus: 0,//标识添加/更新的确认框是否显示,0:都不显示,1:显示添加,2:显示更新}initColumns = () => {this.columns = [{title: '分类的名称',dataIndex: 'name',key: 'name',},{title: '操作',width: 300,render: (category) => (//返回需要显示的界面标签<span><LinkButton onClick={()=>this.showUpdate(category)}>修改分类</LinkButton>{/*如何向事件回调很熟传递参数*/}{this.state.parentId==='0' ? <LinkButton onClick={()=>{this.showSubCategorys(category)}}>查看子分类</LinkButton> : null}</span>),},];}//异步获取一级分类列表getCategorys = async () => {this.setState({loading:true})const {parentId} = this.stateconst  result = await reqCategorys(parentId)this.setState({loading:false})if(result.status===0){//取出分类数组,可以是一级的也可能是二级的const categorys = result.dataif(parentId==='0'){this.setState({categorys})}else {this.setState({subCategorys:categorys})}}else {message.error('获取分类列表失败')}}//显示二级列表showSubCategorys = (category) => {this.setState({parentId:category._id,parentName:category.name,},()=>{//获取二级分类列表this.getCategorys()})}//显示一级分类列表showCategorys = () => {//更新为显示一级列表的状态this.setState({parentId: '0',parentName: '',subCategorys: [],})}//发ajax请求,执行异步任务componentDidMount() {this.getCategorys()}//响应点击取消,隐藏确认框handleCancel = () => {this.setState({showStatus: 0,})}//显示添加的确认框showAdd = () => {console.log('showAdd')this.setState({showStatus: 1,})}//添加分类addCategory = () => {console.log('addCategory')}//显示修改的确认框showUpdate = (category) => {//保存分类对象this.category = categorythis.setState({showStatus: 2,})}//更新分类updateCategory = () => {console.log('updateCategory')}//为第一次render准备数据UNSAFE_componentWillMount() {this.initColumns()}render() {const extra = (<Button onClick={this.showAdd} style={{backgroundColor:'green',color:'white'}}>{<PlusOutlined />}添加</Button>)const {categorys,subCategorys,parentId,parentName,loading,showStatus} = this.stateconst category =this.category || {}const title = parentId==='0' ? '一级分类列表' : (<span><LinkButton onClick={this.showCategorys}>一级分类列表</LinkButton><ArrowRightOutlined style={{marginRight:5}}/><span>{parentName}</span></span>)return (<Card title={title} extra={extra}><TableborderedrowKey='_id'loading={loading}dataSource={parentId==='0' ? categorys: subCategorys}columns={this.columns}pagination={{defaultPageSize:5,showQuickJumper:true}}/>;<Modal title="添加分类" visible={showStatus===1} onOk={this.addCategory} onCancel={this.handleCancel}><AddForm/></Modal><Modal title="更新分类" visible={showStatus===2} onOk={this.updateCategory} onCancel={this.handleCancel}><UpdateForm categoryName={category.name ? category.name : ''}/></Modal></Card>);}
}

子组件代码

import React, {Component} from 'react';
import PropTypes from 'prop-types';
import {Form,Input
} from 'antd'const Item = Form.Item
// const [form] = Form.useFormexport default class UpdateForm extends Component {formRef = React.createRef()static propTypes = {categoryName:PropTypes.string.isRequired,}componentDidUpdate() {// this.formRef.current.setFieldsValue({//   categoryName: this.props.categoryName,// });// this.formRef.current.resetFields()}onFinish = () => {}render() {const {categoryName} = this.props// console.log(this.props)return (<Form onFinish={this.onFinish} ref={this.formRef}><Item name="categoryName" initialValue={categoryName}><Input placeholder='请输入分类名称'></Input></Item></Form>);}
}

这是完整的代码。

antd4.x版本解决父组件传递给子组件值的时候动态显示initialValue值的问题相关推荐

  1. VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值父组件传递给子组件

    需求:VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值由父组件动态传给子组件. 效果图: 实现步骤: 1.创建一个子组件 Toptips.vue (它就是公共提示组件), optips.vue代 ...

  2. P13: * Component组件拆分、子组件向父组件传递数据

    React16 基础 阐述 新建服务菜单组件 父组件向子组件传值 子组件向父组件传递数据 warning警告 获取数组索引下标 子组件调用父组件方法 预览最终效果 index.js Xiaojieji ...

  3. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法

    vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...

  4. Vue.js 父组件向子组件传值和子组件向父组件传值

    父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script>// 创建 Vue 实例,得到 ViewModelvar vm = new ...

  5. vue请求数据传给子组件_vue.js基础,父组件如何向子组件传递数据「607」

    本文只有一个学习点. 父组件如何向子组件传递数据. 一起学习,更多文章请关注我的头条号,我是落笔承冰. 一.先创建一张空白网页index.html,在head标签里设置好vue的链接库. 二.写一个绑 ...

  6. Vue2.x中的父组件数据传递至子组件

    父组件结构 template <template><div><v-girl-group :girls="aGirls"></v-girl- ...

  7. vue父组件变量传递子组件_Vue2.x中的父组件数据传递至子组件

    父组件结构 template :girls="aGirls"> script import vGirlGroup from './GirlGroup' export defa ...

  8. 父html向子html传递参数,子组件向父组件传值

    react 子组件怎么向父组件传值 Vue中子组件给父组件传值,父组件接收不到 vue组件在html声明的事件尽量不要用大写的哈,会被解析成小写的,因为html属性是大小写不敏感的 另外调用的函数要生 ...

  9. Vue父组件传给子组件数据,子组件得不到数据解决方法

    目录 第一种方案 (1)数据为 数组 时候 父组件 子组件 (2)数据为 对象 时候 父组件 子组件 (3)数据为 数字 时候 父组件 子组件 (4)数据为 字符串 时候 父组件 子组件 第二种方案 ...

最新文章

  1. bootstrap 时间线_股票配资均量线的实战用法绝技是什么?怎么用它判断买卖点?...
  2. 我非要捅穿这 Neutron(三)架构分析与代码实现篇(基于 OpenStack Rocky)
  3. 计算掩码、网络地址(最小主机地址,最高主机地址)、广播地址、IP地址范围、主机号...
  4. 再次携号转网_湖北省通信管理局召开视频会议 再次强调携号转网服务要求
  5. 【数据结构与算法】基础数据结构与算法大全
  6. VS2010中无法嵌入互操作类型“......”,请改用适用的接口的解决方法
  7. Node.js异步编程~超级详细哦
  8. java有常函数_Java开发笔记(十一)常见的数学函数
  9. matlab源码——政治优化算法(Political Optimizer,PO)
  10. 中职“网络班级”中家校沟通模块的应用实践
  11. 量子纠缠 计算机,计算机科学家利用量子纠缠系统,证实44年前的一个猜想是错误的...
  12. CVE-2017-11176: A step-by-step Linux Kernel exploitation (part 3/4)
  13. Android Q设备唯一标识符(Device ID)获取
  14. 【CSS选择器】CSS选择器有哪些?如何选择合适的使用?各类选择器的优劣势是什么?
  15. 什么是BI、数据仓库、数据湖和数据中台,他们有什么差异?
  16. 财会法规与职业道德【11】
  17. LaKSA: A Probabilistic Proof-of-Stake Protocol
  18. [机器学习]Lasso,L1范数,及其鲁棒性
  19. 移动操作系统元心可能基于MeeGo系统开发
  20. 卷积神经网络新方向:Three-column CNN实现无参考立体图像评估

热门文章

  1. iReport 报表元素大全
  2. Oracle报错“ORA-00918:column ambiguously defined”
  3. 基于Zookeeper实现配置中心
  4. AD10 快捷键(快捷键失灵 常用快捷键 换层中的快捷键* 和L的用法)
  5. java synthetic_Java synthetic 关键字原理解读
  6. C Primer Plus(第六版)第六章6.16编程练习-6.16代码
  7. rds mysql 是什么_云数据库RDS是什么
  8. python学习2019/4/25
  9. 12款AI代码生成工具,都很能打
  10. linux查看服务器配置信息