如何在React Native中跟踪一组映射的组件?

时间:2017-10-31 21:51:44

标签: reactjs react-native

我有一组通过映射数据呈现的文本按钮:

  <View style={{paddingTop: '3%', height:"100%", width:1400, flexDirection: "row", flexWrap: 'wrap'}}>
    {this.props.data.map((item, index) => {
      console.log("profession item: ", item)
      return (
        <View 
          style={{margin:4, marginHorizontal:12}}
          key={item.pro_id}>
          <TextItemToggle
            value={item.en}
            onPress={(value)=>{this._onPressHandler(value)}}
          />
        </View>
      )
    })}
  </View>

只能突出显示其中一个按钮。按下并突出显示另一个按钮后,将突出显示已突出显示的按钮。我不确定如何跟踪通过映射呈现的组件。

我首先想到使用字符串(每个按钮都有一个唯一的字符串值)来引用每个按钮,但根据https://hashnode.com/post/why-are-string-refs-considered-legacy-in-react-cit1ttd8x0spevx53ltk1gdhh它可能会被弃用?还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

一个选项可以是存储需要在状态中突出显示的项目的ID,同时映射检查该ID以突出显示。

示例

_onPressHandler = (event, id) => {
  this.setState({ selected: id});
}

render() {
  return (
    <View style={{paddingTop: '3%', height:"100%", width:1400, flexDirection: "row", flexWrap: 'wrap'}}>
      {this.props.data.map((item, index) => {
        console.log("profession item: ", item)
        return (
          <View 
          style={[{margin:4, marginHorizontal:12}, (this.state.selected === item.pro_id : {backgroundColor: 'grey'} : {})]}
          key={item.pro_id}>
            <TextItemToggle
            value={item.en}
            onPress={(value)=>{this._onPressHandler(value, item.pro_id)}}
            />
          </View>
        )
      })}
    </View>
  )
}