【问题标题】:Array.map item to a stateArray.map 项目到一个状态
【发布时间】:2017-05-26 19:11:35
【问题描述】:

如何获取 array.map 之外的值?

例如:

array.map(index, item) => { return ( <Text>{item.ID}</Text> ) }

除此之外,我还有类似的东西:

<Button onPress={() => this.editItem(CURRENT_ITEM_ID)}></Button>

例如,其中 CURRENT_ITEM_ID 是卡片上的当前项目。

像 Tinder 一样,我有一系列卡片要刷卡,我正在映射,但“Like”按钮不是卡片的一部分。这样我不会用卡片移动 Like 按钮,而是静态的,我只是移动卡片的内容。所以我需要一种从地图外部访问当前 item 的方法。该卡具有文本和 ID。下面的组件有一个按钮,我需要单击它传递当前卡片的 item.ID

有没有办法将此项目设置为状态?

谢谢。

【问题讨论】:

  • 你在哪里设置当前项?
  • 刷卡时如何显示正确的卡片?你一定已经把它存储在某个地方了。
  • CURRENT_ITEM_ID 是地图中的项目。我需要从地图外部访问它。
  • 但是您想访问在 map 函数中生成的组件(在这种情况下,您需要将 map 的结果存储在变量中并访问它)或基础项目(在这种情况下,您将使用array.find)?
  • 很好奇....屏幕上是否有多个按钮或卡片在任何给定时间?

标签: javascript arrays reactjs react-native state


【解决方案1】:

一种解决方案是创建一个 state 属性来保存正在显示的卡片的 id,然后当单击按钮时,您会获取该状态并对其进行处理。这是一个使用 onClicks 和 div 的示例。

const arr = ['card1', 'card2', 'card3', 'card4'];

class App extends React.Component {
  constructor(props) {
    super(props)
    this.handleClick = this.handleClick.bind(this);
    this.handleButtonClick = this.handleButtonClick.bind(this);
  }
  handleClick(index) {
    this.setState({ visibleCard: index });
  }
  handleButtonClick() {
    console.log('this.state.visibleCard', this.state.visibleCard);
    console.log('visibleCard', arr[this.state.visibleCard]);
  }
  render() {
    return (
      <div>
        {arr.map((card, i) => <div onClick={() => this.handleClick(i)}>{card}</div>)}
        <button onClick={this.handleButtonClick}>test</button>
      </div>
    )
  }
}

基本思想是将索引与卡片联系起来。然后处理程序将该状态设置为可见(不确定您的情况是什么,因为它看起来像一个移动应用程序)。然后在您的按钮中,您使用状态来抓取可见卡片并将数据传递给您需要的任何其他功能。

【讨论】:

    【解决方案2】:

    我通常做的是在地图函数中绑定事件。

    array.map( (item, key) => {
        return (
            <div>
                <Text>{item.ID}</Text>
                <button onClick={this.editItem.bind(this, item.ID)}>Edit</button> 
            </div>
        )
    }
    

    不确定你的 HTML 是什么样的,但你需要在 map 中绑定函数参数。

    【讨论】:

    • 我需要这个按钮在地图之外。你向我展示的方式有效,但它必须像 Tinder。您移动内容,但动作是静态的。在我的情况下,卡片具有 item.ID,但我的按钮无法访问该项目。
    猜你喜欢
    • 2021-12-07
    • 2021-02-02
    • 2020-02-11
    • 1970-01-01
    • 2015-10-31
    • 2017-03-10
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多