javascript - 如何将 Prop 从 FlatList 项目传递到模态?

标签 javascript react-native modal-dialog react-native-flatlist touchablehighlight

我已经实现了一个包含 FlatList 的 View 组件,它呈现 TouchableHighlights。我还实现了一个 Modal 组件,我想在不同的地方导入它,包括呈现 FlatList 的组件。

我已经设法从外部打开模态(通过移交可见性 Prop ,通过 nextProps 访问它并将模态状态值设置为“modalVisible”)并从内部关闭它(只需更改它的状态值“modalVisible").

但是:我还想将数据从每个 FlatLists 项目传递到模式。呈现为 TouchableHighlight 的项目应打开模态 onPress 并且模态应包含来自该项目的数据(在下面的代码中,这将是项目 ID)。如何实现将数据传递给模态?我不知何故无法使用 nextProps 让它工作。这似乎更多是与从 FlatLists 项目而不是模态中设置状态相关的问题。

模态:

export default class ModalView extends React.Component {
constructor() {
  super();
  this.state = {
    modalVisible: false,
    id: null,
  };
}

componentWillReceiveProps(nextProps) {
  this.setState({
    modalVisible: nextProps.modalVisible,
    id: nextProps.id,
  })
}

render() {
  return (
     <Modal
      animationType="slide"
      transparent={ true }
      visible={ this.state.modalVisible }
      onRequestClose={() => { this.props.setModalVisible(false) }}
     > 
       <View>
         <View>
          <Text>{ this.state.id }</Text>
          <TouchableHighlight
            onPress={() => { this.props.setModalVisible(false) }}
          > 
            <Text>Hide Modal</Text>
          </TouchableHighlight>
         </View>
       </View>
     </Modal>
  )
}
}

FlatList渲染TouchableHighlights:

export default class RecentList extends React.Component {
constructor() {
  super();
  this.state = {
    modalVisible: false,
    id: null,
  }
}

_onPressItem(id) {
  this.setState({
    modalVisible: true,
    id: id,
  });
};

_renderItem = ({item}) => {
  return (
    <TouchableHighlight
      id={item.id}
      onPress={this._onPressItem}
    >
      <View>
        <Text>{id}</Text>
      </View>
    </TouchableHighlight>
  )
};

render() {
  let data = realm.objects('Example').filtered('completed = true')
             .sorted('startedAt', true).slice(0, 10)
  return (
    <View>
      <ModalView
        modalVisible={ this.state.modalVisible }
        setModalVisible={ (vis) => { this.setModalVisible(vis) }}
        id={ this.state.id }
      />
      <FlatList
        data={data}
        renderItem={this._renderItem}
        keyExtractor={(item, index) => index}
      />
    </View>
  )
}
}

最佳答案

你错过的一个小错误......

_renderItem = ({item}) => {
  return (
    <TouchableHighlight
      id={item.id}
      onPress={() => this._onPressItem(item.id)} // Your not sending the item.id
    >
      <View>
        <Text>{id}</Text>
      </View>
    </TouchableHighlight>
  )
};

关于javascript - 如何将 Prop 从 FlatList 项目传递到模态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488465/

相关文章:

javascript - 找到Asterisk并在表单标签中更改为红色[Meteor JS Way]

android - 如何设置 ScrollView 以适应 React Native?

user-interface - 模式对话框对于网络来说是一个好的实践吗?

jquery - 如何让 jQueryUI 对话框动态加载内容

javascript - jQuery Flexslider 无法在 iPhone 和 iPad 上工作

javascript - MetaMask Web3 : is there any way to make sure website user is connected to a particular network?

javascript - 返回整个自调用函数

react-native - 如何修复 Detox 包子路径 './build/cli/args' 未由 "exports"定义

javascript - Flowtype 属性 'msg' 缺失为 null 或未定义

javascript - Bootstrap : Open Another Modal in Modal