react笔记(问题记录)

======================
console报错Objects are not valid as a React child (found: object with keys {..}).
标签里顶多能直接放数组(进行显示),不可以直接放对象,要转换成string或者数组或者循环把元素显示出来

======================
eslint class-methods-use-this规则
class类里的render方法里必须有this.

======================
react获得input输入值
https://www.html.cn/qa/react/16946.html
写法https://blog.csdn.net/GuanJdoJ/article/details/83375570

const Todo = ({ onClick, complete, text, ...props }) => (
  <li
    onClick={onClick}
    style={{textDecoration: complete ? "line-through" : "none"}}
    {...props}
  >
    {props.text}
  </li>
)

参考链接:https://juejin.im/post/5b5096b66fb9a04f85534ebc

useState hook 原文
背景:在复制antd官网代码的时候,组件都是函数式的写法,本人想将其改写成class类型组件,遇到一直报错说不可以使用useState。但是函数式的写法式本来说不支持状态修改的,useState hook是专门用来解决这个问题的,它可以帮助添加函数式的组件的状态。
至于class类型的组件修改,直接操作this.state就可以

getFieldDecorator用法(一)——登录表单

别人antd组件使用的坑

修改state

  • state类型为不可变类型(number,string,bool,bull,undefined),直接赋值修改
  • state类型为数组,this.setState(preState=>books:[...preState,''React Guide]) (注:得使用返回新数组的数组方法,或者新建一个数组赋值,直接改没用)
  • state类型为对象,this.setState(preState=>{
    owner:{...preState.owner,name:'Jason'}
    })
    (有关preState的说明)
    连续setState是不行的,因为会合并setState操作参考,要想达到修改,需要使用preState作为参数来在前一个状态的基础上setState

参考
https://blog.csdn.net/weixin_39939012/article/details/80876022

=========================
获得每一行record的key值
正确写法:

render: (_: any, record: any) => (
          <div>
            <Button type="link" onClick={() => this.props.handleEdit(record)}>编辑{record.key}</Button>
            <Button type="link" onClick={() => this.props.handleAdd()}>添加</Button>
          </div>
        ),

错误写法

render: (record: any) => (
          <div>
            <Button type="link" onClick={() => this.props.handleEdit(record)}>编辑{record.key}</Button>
            <Button type="link" onClick={() => this.props.handleAdd()}>添加</Button>
          </div>
        ),

========================
在useEffect里调用setState
原写法:(警告:会无限渲染,提示将form和stageInfo,作为useEffect的第二个参数)
useEffect(() => {
if (stageInfo !== undefined) {
form.setFieldsValue({ name: stageInfo.name })
setCmdData(stageInfo.commands)
}
},[form,stageInfo]);
正确写法(无警告)
useEffect(() => {
if (stageInfo !== undefined) {
form.setFieldsValue({ name: stageInfo.name })
setCmdData(stageInfo.commands)
}
},[form,stageInfo]);

==================================
子组件传给父组件的值不一样,onsubmit data和vv after set里的不一样,现象就是要setstate是上一次的setstate(PS:state要改两次就是数组对象这种一般都是没有真正setstate成功。。。。)
父组件
fileSubmit = (vals: IFiles[]) => {
console.log("onsubmit data:", vals)
this.setState({ vv: { ...this.state.vv, files: vals } })
console.log("vv after set",this.state.vv.files)
this.onSubmit()
}
子组件
问题写法:
onSave = (record: IFiles) => {
this.props.onSubmit(this.state.files)
this.setState({ currentEditRow: -1 });
}
正确写法:
onSave = (record: IFiles) => {
this.checkForm().then((resolve) => {
this.props.onSubmit(resolve)
})
// 使用用promise之后,数据一致,不然都是不完整的残缺数据
this.setState({ currentEditRow: -1 });
}

====================================
子组件修改state不成功,又是console的出来,没有真正修改造成重新渲染
错误做法:使用splice
const nlist = [...this.state.files]
nlist.splice(record.key, 1)
for (let i = 0; i < nlist.length; i++) {
if (i >= record.key) {
nlist[i].key -= 1
}
}
this.setState({ files: nlist })
正确做法:复制一个空数组将元素每个push进去

类似:没有真正删除
错误:
let formData = this.state.stages
this.setState({ stages: formData.filter((item: IStages) => item.key !== row) })
}
正确:
let form = this.state.ss
form.splice(row, 1)
let newForm = []
for (let index = 0; index < form.length; index++) {
const element = form[index];
element.key = index
newForm.push(element)
}
this.setState({ ss: [...newForm] });

====================================
错误做法:父组件异步获得的值,props传给子组件,props给子组件state赋初值,子组件用state数据显示为空
原因:在子组件挂载时,父组件还没有拿到数据,props在赋值给state时还是空的,于是没有

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260