Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将信息存储为静态函数与静态对象之间的区别_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 将信息存储为静态函数与静态对象之间的区别

Javascript 将信息存储为静态函数与静态对象之间的区别,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我不确定这个问题的措辞是否正确,但本质上我是在遵循一个教程,其中我们需要一种方法将react类组件的状态重置为其初始状态。我继续并通过创建一个具有初始值的对象来实现它,并将组件状态设置为与之相等: //我的实现***************************************** 类游戏扩展了React.Component{ //存储游戏的初始状态 静态初始状态={ 所选号码:[], numberOfStars:Game.randomNumber(), 回答正确:空, 使用编号:[]

我不确定这个问题的措辞是否正确,但本质上我是在遵循一个教程,其中我们需要一种方法将react类组件的状态重置为其初始状态。我继续并通过创建一个具有初始值的对象来实现它,并将组件状态设置为与之相等:

//我的实现*****************************************
类游戏扩展了React.Component{
//存储游戏的初始状态
静态初始状态={
所选号码:[],
numberOfStars:Game.randomNumber(),
回答正确:空,
使用编号:[],
允许重画:5,
多尼斯塔斯:''
}
//将React状态设置为初始状态
状态=Game.initialState;
//重新设置游戏。
重置游戏=()=>{
this.setState(Game.initialState);
}
}
// ************************************************************
但当我继续观看视频时,导师通过生成一个返回对象的静态函数来实现它:

所以我的问题是:这两种实现之间是否有重要的区别?或者它们基本相同?


我可能想得太多了,但我不确定JavaScript是否有某些方面或者Reactjs处理状态的方式可能会使导师的实现更好


顺便问一下,这些是静态的,有什么好的理由吗?如果不是这样,不是更好吗?如果需要的话,可以更容易地创建具有不同初始状态值的不同实例?

您的第二个示例不正确。您需要调用
Game.initialState
,然后它将返回一个新对象

resetGame = () => {
    this.setState(Game.initialState());
}
在这一点上,不同之处在于,在示例一中,initialState可能会意外地发生突变,当状态重置时,最终会出现意外的初始状态


在示例2中,每次调用函数创建初始状态时,它都会重新创建对象。因此,意外地改变游戏的重置对象会变得更加困难。

第二个变量总是将游戏重置为不同的状态,因为
numberOfStars
的随机值(
game.randomNumber()
每次调用
initialState()
)都会被调用。我不确定这是否正确,除非这是一个怪癖。在他们的编辑器中,即使没有括号,我在问题中所写的方式仍然有效。我复制了两个示例,对另一个进行了注释以进行测试。对,基本上是为了避免JavaScript无法定义静态常量。e、 谢谢你,伙计。
resetGame = () => {
    this.setState(Game.initialState());
}