Javascript 根据react native中传递的参数设置动态状态名称

Javascript 根据react native中传递的参数设置动态状态名称,javascript,mobile,react-native,state,Javascript,Mobile,React Native,State,我是新来的,在中国发展。现在我正试图为飞镖游戏“板球”编写一个简单的记分板,让我的脚湿透 这基本上是一个游戏,你需要击中15-20和靶场3次关闭他们。如果你击中他们超过3次,你可以收集点 我的第一个版本的应用程序是工作,但它的丑陋和使用大量的代码行。我为每个点域(15-20+靶心)创建了一个函数来添加点。比如: tap20(){ this.state.indicator = "x"; if(this.state.tapped_20 > 1){ this.state.indica

我是新来的,在中国发展。现在我正试图为飞镖游戏“板球”编写一个简单的记分板,让我的脚湿透

这基本上是一个游戏,你需要击中15-20和靶场3次关闭他们。如果你击中他们超过3次,你可以收集点

我的第一个版本的应用程序是工作,但它的丑陋和使用大量的代码行。我为每个点域(15-20+靶心)创建了一个函数来添加点。比如:

tap20(){

this.state.indicator = "x";

if(this.state.tapped_20 > 1){
    this.state.indicator = "xx";
if(this.state.tapped_20 > 2){
  this.state.indicator = "xxx";
  if(this.state.tapped_20 > 3){
  this.state.points = 20 + this.state.points

  }
}
}

this.setState({

points: this.state.points,
tapped_20: this.state.tapped_20+1,
})
}

tap19(){

this.state.indicator_19 = "x";

if(this.state.tapped_19 > 1){
    this.state.indicator_19 = "xx";
if(this.state.tapped_19 > 2){
  this.state.indicator_19 = "xxx";
  if(this.state.tapped_19 > 3){
  console.log("Ab hier Punkte..")
  this.state.points = 19 + this.state.points

  }
}
}

this.setState({

points: this.state.points,
tapped_19: this.state.tapped_19+1,
})
}
等等。。我现在的方法是用函数过度给出一个参数。所以我只有一个函数,它根据给定的参数添加点。像这样:

<TouchableHighlight style={styles.button}
onPress={this.testfunc.bind(this, 20)}
underlayColor='#99d9f4'>
<Text style={styles.buttonText}> 20 Test</Text>
 </TouchableHighlight>
当我在浏览器中调试它时,它表示console.log(this.state.indicator_20)未定义


这似乎不适用于这个州。。。有人知道如何解决这样的问题吗

首先,您不应该在React Native中引用
窗口。考虑一下红旗。< /P>
其次,您不能以这种方式计算对象的属性:
window['this.state.indicator\uu'+i]
。您在一个名为“bar”的对象上引用了一个名为“foo”的属性,因此:
bar['foo']
,您不能引用任何更深的属性(即,没有
bar['foo.baz']

无论如何,react为此提供
setState

testfunc(i) {
  const update = {};

  update['indicator_' + i] = 'test';

  this.setState(update);
}

然后在渲染中引用
此.state.indicator_X
,它将按预期更新。

首先,您不必在React Native中引用
窗口。考虑一下红旗。< /P>
其次,您不能以这种方式计算对象的属性:
window['this.state.indicator\uu'+i]
。您在一个名为“bar”的对象上引用了一个名为“foo”的属性,因此:
bar['foo']
,您不能引用任何更深的属性(即,没有
bar['foo.baz']

无论如何,react为此提供
setState

testfunc(i) {
  const update = {};

  update['indicator_' + i] = 'test';

  this.setState(update);
}

然后在渲染中参考
this.state.indicator\ux
,它将按预期更新。

解决方案是:
this.state['tapped'+i]
this.state['tapped'{i}]
解决方案是:
this.state['tapped'+i]
this.state['tapped'{i}}]
,谢谢你,这正在工作。但现在我遇到了下一个陷阱。我想将我的tapped变量设置为当前状态,如本例所示:
updatet['tapped\u'+I]=this.state.tapped\u 20+1我试图用不同的表达式插入变量I,但它返回字符串或NaN错误。例如:
updatet['tapped\'+i]=['this.state.tapped\'+i]+1['this.state.tapped\+i]+1
在JavaScript中完全是胡说八道。请仔细阅读。但我如何以同样的方式访问该状态?像这样,state.indicator\ui?谢谢你,亚当,这很有效。但现在我遇到了下一个陷阱。我想将我的tapped变量设置为当前状态,如本例所示:
updatet['tapped\u'+I]=this.state.tapped\u 20+1我试图用不同的表达式插入变量I,但它返回字符串或NaN错误。例如:
updatet['tapped\'+i]=['this.state.tapped\'+i]+1['this.state.tapped\+i]+1
在JavaScript中完全是胡说八道。请仔细阅读。但我如何以同样的方式访问该状态?像这样。state.indicator\ui?