javascript - React-native 将渲染数组中的值插入到新数组中

标签 javascript arrays reactjs react-native

我想做的是将我渲染的旧数组中的值插入到新数组中。

现在它可以完美地呈现我想要的数据,但是当我将它插入新数组时它变成 [id : undefined]

如何调用我从 ListView 呈现的 ticketId 以保存到 myState 数组中?

 class SeactionSeating extends React.Component {

       state = { ticket: [], myState: [] };

       componentWillMount() {
         const tempticket = [];
          let i;
          let k = 1;
          let x;
          for (i = 1; i <= 50; i++) {
              k++;
              if (i < 10) {
                x = 'north';
              } else if (i < 20) {
                x = 'south';
              } else if (i < 30) {
                x = 'west';
              } else if (i < 40) {
                x = 'east';
              }
             tempticket.push({ ticketId: i, row: k, gate: x });
          }
          this.setState({ ticket: tempticket });
          this.setState({ myState: [] });
          //i deliberately leave mystate empty so that i can push new array later
       }
     render() {
     const ticketTemp = () => {
       this.state.myState.push({ id: ticketId });
       console.log(this.state.myState);
     };
    return (
      <Container>
        <View style={styles.listViewTitlePanel}>
           <Text> hello there</Text>
        </View>
          <Content>
            <ScrollView>
            <List>
              { this.state.ticket.map((item, i) => (
                <ListItem
                roundAvatar
                key={i}
                avatar={
                  <View >
                    <Text>{item.ticketId}</Text>
                  </View>
                }
                  title={
                    <View>
                      <Text>ROW :{item.row}</Text>
                    </View>
                  }
                  subtitle={
                    <View>
                      <Text>GATE :{item.gate}</Text>
                    </View>
                  }
                   //call ticketTemp
                   onPress={ticketTemp}
                />
              ))
              }
              </List>
            </ScrollView>
          </Content>
      </Container>
    );
  }
  }

最佳答案

您应该将 trackId 传递给您的 ticketTemp 函数,它可以将此值推送到 myState 数组中。我就是这么做的。并且我将ticketTemp 函数转移到render 函数之外,因为修改状态的函数不能在render 内部。 你的代码必须是这样的:

class SeactionSeating extends React.Component {
  state = { ticket: [], myState: [] };

  componentWillMount() {
    const tempticket = [];
    let i;
    let k = 1;
    let x;
    for (i = 1; i <= 50; i++) {
      k++;
      if (i < 10) {
        x = 'north';        
      } else if (i < 20) {
        x = 'south';
      } else if (i < 30) {
        x = 'west';        
      } else if (i < 40) {       
        x = 'east';
      }                          
        tempticket.push({ ticketId: i, row: k, gate: x });
      }
      this.setState({ ticket: tempticket });    
      // this.setState({ myState: [] }); //this line must be removed
      //i deliberately leave mystate empty so that i can push new array later
    }

    ticketTemp(ticketId) {
      this.state.myState.push({ id: ticketId });
      console.log(this.state.myState);
    };

    render() {

    return (
      <Container>
        <View style={styles.listViewTitlePanel}>
           <Text> hello there</Text>
        </View>
          <Content>
            <ScrollView>
            <List>
              { this.state.ticket.map((item, i) => (
                <ListItem
                roundAvatar
                key={i}
                avatar={
                  <View >
                    <Text>{item.ticketId}</Text>
                  </View>
                }
                  title={
                    <View>
                      <Text>ROW :{item.row}</Text>
                    </View>
                  }
                  subtitle={
                    <View>
                      <Text>GATE :{item.gate}</Text>
                    </View>
                  }
                   //call ticketTemp
                  onPress={() => this.ticketTemp(item.ticketId)}
                />
              ))
              }
              </List>
            </ScrollView>
          </Content>
      </Container>
    );
  }
}

我做了一些改变,现在我运行没有错误,谢谢

关于javascript - React-native 将渲染数组中的值插入到新数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46335922/

相关文章:

javascript - 状态数组不断重新排序

javascript - 如何在React组件中获取DOM元素?

javascript - 函数式编程和 DOM 操作

javascript - 用鼠标旋转固定大小的线

javascript - 使用 .$on 测试指令

php - php json 输出中 undefined variable

javascript - 在经常调用的函数中获取粘性随机数(Javascript)

javascript - find() 无法识别 javascript 对象数组中的重复值

reactjs - 从 react 中的对象数组中获取第一个对象

reactjs - .simulate ('click' )仅在同一组件上通过 ID 和 Class 执行两次时才有效