React Native:如何从父级的事件函数中调用子级引用?

时间:2018-10-12 06:19:34

标签: javascript react-native react-redux

将父标记设为<TouchableWithoutFeedback>,将子标记设为<Image>,试图从父onPress函数更改图像源,但会出错。如何使用ref存档?或其他解决方法?

本机版本:0.56

错误:

Cannot read property 'favIcon' of undefined

示例代码:

const fav = require('../../images/favorite.png');
const nonfav = require('../../images/not_favorite.png');

updateFavorite = (id) => {
    this.props.refs.favIcon.source(fav);      
}

render(){
  return (
    <View style={styles.container}>                
       <TouchableWithoutFeedback onPress={ this.updateFavorite.bind(this, 1) }>
         <View style={ styles.imageView }>
           <Image refs="favIcon" source={ nonfav } />                   
         </View>
       </TouchableWithoutFeedback>
       <TouchableWithoutFeedback onPress={ this.updateFavorite.bind(this, 2) }>
         <View style={ styles.imageView }>
           <Image refs="favIcon" source={ nonfav } />                   
         </View>
       </TouchableWithoutFeedback>
   </View>
  )
}

注意:仅更改onPressed的子图像,而不是所有图像。

2 个答案:

答案 0 :(得分:0)

使用nativeProps试试,例如

import resolveAssetSource from 'resolveAssetSource';

this.refs['favIcon'].setNativeProps({
   src: [resolveAssetSource(fav)]
});

请参考this

它可能不适用于本机0.50+版本,但根据this注释,它应与0.57.1一起使用

答案 1 :(得分:0)

最好通过调用setState方法来完成React中元素的属性更新。尝试以下

updateFavorite = (event) => {
  event.target.setAttribute('src', fav)
}

render(){
  return (
    <View style={styles.container}>       
       <TouchableWithoutFeedback>
         <View style={ styles.imageView }>
           <img ref={ref => this.favIcon = ref} src={nonFav} onPress={ this.updateFavorite }/>                   
         </View>
       </TouchableWithoutFeedback>         
       <TouchableWithoutFeedback>
         <View style={ styles.imageView }>
           <img ref={ref => this.favIcon = ref} src={nonFav} onPress={ this.updateFavorite } />                   
         </View>
       </TouchableWithoutFeedback>
   </View>
  )
}