Javascript 反应组件状态的默认功能参数值
今天我为我的同事做了一个回顾,我发现了一个令我感兴趣的函数定义。如果函数调用未提供参数,则他在react组件内使用默认参数值实现了一个函数。他使用Javascript 反应组件状态的默认功能参数值,javascript,reactjs,function,default-parameters,Javascript,Reactjs,Function,Default Parameters,今天我为我的同事做了一个回顾,我发现了一个令我感兴趣的函数定义。如果函数调用未提供参数,则他在react组件内使用默认参数值实现了一个函数。他使用状态值作为默认参数 它看起来像这样的例子: class CustomComponent extends React.Component { constructor(props) { this.state = { loadedData = [], // array of objects
状态
值作为默认参数
它看起来像这样的例子:
class CustomComponent extends React.Component {
constructor(props) {
this.state = {
loadedData = [], // array of objects
};
this.filterDates = (fromUtc, toUtc, loadedData = this.state.loadedData) {
// do something with 'loadedData' based on time range 'fromUtc' and 'toUtc'
}
}
}
他不能给我一个很好的解释。只是它在他的实现中起了作用
我一直使用“静态”默认参数值(如[]
、数字等)
我很好奇是否可以使用某种“动态”默认参数,当state
改变时,该参数会改变
这样写可以吗?可能有问题吗?根据这种方法是好的。然而,我质疑将默认值分配给状态,该状态根据定义是可变的,除非它达到预期效果。默认参数不应该是可变的。就我个人而言,我第一次看到这种方法,我认为这不是直观的,但可能只是我的经验
在我看来,下面的代码更干净、更容易理解,而且错误更少:
类CustomComponent扩展了React.Component{
建造师(道具){
此.state={
loadedData=[],//对象数组
};
this.filterDates=(fromUtc、toUtc、loadedData=[])=>{
//根据时间范围“fromUtc”和“toUtc”使用“loadedData”执行操作
}
}
}
在构造函数中,this.state是一个简单的对象,没有任何神奇的状态特征。因此,loadedData=this.state.loadedData
与loadedData=[]
相同,但第二个更可读。应该可以吧?但是为什么参数首先是可选的呢?如果您可以传递this.state.loadedData
,那么逻辑在哪里呢?在我的POV中,这是不好的。默认值应该是静态值,如果有动态值,它将基于业务逻辑,并且应该是主体的一部分instead@dennis-我不知道我是否理解你的问题。传递this.state.loadedData
的逻辑在组件本身内部,但功能不同。一旦他从state
调用filterDates(fromUtc,toUtc)
(不带第三个参数)中筛选数组,第二次调用时使用不同的数组引用,该数组引用遵循this.state.loadedData
格式。(函数参数被称为loadedData
,这可能会让人困惑)