react踩坑记录

input的只读模式

<Input readOnly />  

注意:是readOnly,readonly或readonly=”readonly”无效。

绑定的函数在加载时就会马上执行,不是触发才执行 
写法规范例子:

不会马上执行:
<div onClick={ handlerClick }>点击我呀!</div>
有传入参数,加载时马上执行:
<div onClick={ handlerClick(i) }>点击我呀!</div>
解决方法:
<div onClick={ ()=>{ handlerClick(i) } }>点击我呀!</div> 

不带毫秒数的时间戳 
format前要先unix为标准格式, moment.unix(int类型)。 
多个时间方法调用:

const formatDate = (timeTs, formatter = 'YYYY-MM-DD HH:mm:ss') => (
    !timeTs ? '' : moment.unix(parseInt(timeTs, 10)).format(formatter)
);
const planEndTime=formatDate(stateSit.planEndTime);

Error: must set key for children 
在使用antd-design中的select的组件时候,报这样的错误。 
原因:在select中设置了多选mode = ‘multiple’,并把initialValue或value的值设为了[”]; 
解决方法:initialValue或value值设为空[],或不为空的字符串[“xxx”];

Warning: getFieldDecorator will override value, so please don’t set value directly and use setFieldsValue to set it. 
在使用antd-design中的From组件用getFieldDecorator方式的时候,报这样的警告。 
原因:因为我们在自定义组件中定义了value、defaultValue值,getFieldDecorator会覆盖我们定义的值; 
解决方法:不能用控件的 value defaultValue 等属性来设置表单域的值,默认值可以用 getFieldDecorator 里的 initialValue;

页面跳转传参,this.props.location.query和this.props.location.state的区别 
this.props.location.query:跳转后的url中含有传过来的信息;无跳转刷新页面的时候,无需判断是否有传参。 
this.props.location.state:跳转后的url中不含有传过来的信息;无跳转刷新页面的时候,需要判断是否有传参,否则容易报错。

数组的push和concat方法 
push:将一个对象添加到某数组的最后。 
concat:两个或多个数组拼接用,将数组添加到某数组的最后,不会过滤掉重复值。

var arr = [1,2,3];
arr = arr.concat( [ 4,5,6,3] ); 
console.log( arr ); // 输出 [1,2,3,4,5,6,3];

如果你的环境支持 ES6还可以用 ... 

var arr = [ 1,2,3, ...arr2 ];
或者 

var arr = [ 1, 2, 3 ];
arr.push( ...[ 4, 5, 6 ] );

将数组按照某个属性进行分类显示,groupBy 与map合作 
groupBy :http://www.css88.com/archives/7774 
项目实际代码段:

import { groupBy } from 'lodash';
const userContent = stateSit.participants ? Object.values(groupBy(stateSit.participants, 'teamId'))
        .map((men, i) => `${men[0].team}:${men.map(({ employeeId, employeeName }, idx) => employeeName).join(',')}`)
        .join(';') : null;

不要轻易用Async/Await调戏React的生命周期componentWillMount 
Async/Await是异步执行,而componentWillMount我个人认为是同步执行,改为异步的话,虽然不会造成阻塞,但会影响页面数据渲染。比B是由生命周期里的A计算得出的,A却是异步获取的,这样逻辑就不通,因为A正在发送请求的同时,B已经开始执行计算了。应该将A改为callback获取结果。

  • 4.Warning: setState(...): Cannot update during an existing state transition (such as within render or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to componentWillMount。当报这类错误时,说明你的props和states在渲染的时候更改了。

大体意思就是在render这种需要props和state进行渲染的方法中,不能再对props和state进行更新。我的理解是,React会在props和state改变的时候调用 render进行DOM diff然后渲染,如果在渲染过程中再对props和states进行更改,就陷入死循环了。
例如:
<Button onPress={hideMessage('隐藏信息')}>隐藏信息</Button>
当点击button时,就会报上述错误,因为这样会在渲染是更改组件的状态。
解决方法:
在调用方法时创建一个匿名函数,再调用。
<Button onPress={()=>{hideMessage('隐藏信息')}}>隐藏信息</Button>

  • 5.组件<Image source={...} /> 当图像资源来自网络时不显示图片。

当使用<Image />source属性时,从网络获取图片资源,要求设置图片的高度和宽度。FB react native文档上并没有提示这点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中使用useState是非常常见的,它让我们能够在函数组件中添加状态。然而,有一些常见的陷阱需要注意。下面是一些指南: 1. 错误使用数组解构:当使用数组解构语法来访问useState返回的数组时,确保你使用正确的索引位置。例如,如果你使用了多个useState,确保你在解构时使用正确的索引。否则,你可能会将状态值分配给错误的变量。 2. 对象与合并:当你使用对象作为useState的初始值时,记住useState并不会自动将新的对象与旧的对象合并。相反,它会直接替换整个对象。所以,如果你想保留旧对象的内容并仅更新其中的一部分,你需要手动进行合并。 3. 引用相等性:React使用引用相等性来检测状态的更改。这意味着如果你在更新状态时返回相同的引用,React不会触发重新渲染。因此,确保在更新状态时返回新的引用,而不是直接修改现有对象。 4. 异步更新:当在事件处理程序或异步函数中更新状态时,记得useState是异步的。这意味着多个setState调用可能会被合并在一起,而不是立即更新。如果你需要基于当前状态进行计算,请使用回调函数形式的setState,以便正确地捕获先前的状态。 5. 多个useState:当在一个组件中使用多个useState时,确保给每个useState调用一个有意义的名称。这样可以使代码更清晰,易于理解和维护。 6. 无限循环:在使用useState时,一定要小心避免进入无限循环。例如,如果你在组件的渲染阶段内调用了useState,可能会导致无限循环的情况。解决这个问题的方法是确保条件语句正确地包裹useState的调用。 希望这些指南能够帮助你避免在使用useState时遇到的常见问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值