Javascript 将数组作为属性传递

Javascript 将数组作为属性传递,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我想知道是否可以将数组的值作为标记中的值传递?例如,以下代码段: var itemfeed = this.state.jsonData.map((item,i) => { return( <View key={i}> <TouchableHighlight val = {this.state.dataarray[i]} onPress={() => this.toggleExpanded2(i)}> <View s

我想知道是否可以将数组的值作为标记中的值传递?例如,以下代码段:

var itemfeed = this.state.jsonData.map((item,i) => {
  return(
    <View key={i}>
      <TouchableHighlight val = {this.state.dataarray[i]} onPress={() => this.toggleExpanded2(i)}>
        <View style={styles.header}>
          <Text style={styles.headerText}>{item.date}</Text>
        </View>
      </TouchableHighlight>
      <Collapsible collapsed={this.state.dataarray[i]} align="center">
        <View style={styles.content}>
          <Text>{item.Desc}</Text>
        </View>
      </Collapsible>
    </View>             
  );

将项目映射到视图元素。我试图将数组的值作为值传递到collapsed属性中,collapsed是一个布尔值。然而,它似乎不起作用。我知道数组的值确实已定义。我试图做的是,当用户单击视图时,元素将显示并停留在那里,直到用户决定点击并再次关闭它。是否显示取决于“折叠”的值。任何帮助都将不胜感激。

不要将
setState()
视为同步操作,因为它可能不是:

setState()
不会立即改变此.state,但会创建挂起的状态转换。调用此方法后访问
this.state
,可能会返回现有值

无法保证对
setState
的调用的同步操作,并且可能会对调用进行批处理以提高性能


调用
this.setState()
后,不要立即读取
this.state
,而要依赖您的本地变异新状态,例如:

toggleExpanded2(i) {
  var newarr = this.state.dataarray.slice(0); // Create a shallow copy of `this.state.dataarray`, treating the state as immutable
  newarr[i] = !newarr[i];

  var newCollapsed = !newarr[i];

  this.setState({
    dataarray: newarr,
    collapsed: newCollapsed
  });

  console.log("index" + i + "value"+ newarr[i]+ "collapsed"+ newCollapsed);
}

正如您所知,您应该始终将代码格式化为易于阅读的格式。它有助于您和我们理解程序并发现错误。这一次我已经帮你清理了,但如果你以后再问问题,请记住:)抱歉,下次我会记住的,它仍然不起作用:(.每次我单击时,它都不会切换,它只是放在那里。我可以像我那样为折叠指定一个值吗?你不一定可以,因为现在无法知道状态是否已经更新。为什么必须这样做?我需要每个可折叠行都是唯一的,以便打开它们并使它们保持打开状态。Looking回到这里,我不认为我需要在切换函数中设置可折叠状态,因为我正在确定此处的可折叠状态:。但我仍然无法使该条关闭和打开。这使我认为可能在可折叠的赋值中存在某些内容。如果我没有可折叠的唯一值,则所有这些都将打开和关闭,同时单击任何元素。我不希望这样。我希望它们一次打开一个,并保持打开状态,这就是为什么我在collapsedNvm中放置一个数组值,我使用您的方法解决了它。我必须在自己的类中有可折叠面板,然后将值作为道具传递给特定的面板类。此处的某些设置与此设置非常相似:。
toggleExpanded2(i) {
  var newarr = this.state.dataarray.slice(0); // Create a shallow copy of `this.state.dataarray`, treating the state as immutable
  newarr[i] = !newarr[i];

  var newCollapsed = !newarr[i];

  this.setState({
    dataarray: newarr,
    collapsed: newCollapsed
  });

  console.log("index" + i + "value"+ newarr[i]+ "collapsed"+ newCollapsed);
}