Android 如何在React Native[ListView]中按按钮更改图标

Android 如何在React Native[ListView]中按按钮更改图标,android,listview,react-native,react-native-android,react-native-listview,Android,Listview,React Native,React Native Android,React Native Listview,我是个新来的土生土长的人,所以如果这很简单,请原谅我的问题。我试图在列表视图中切换图标。我该怎么做?非常感谢你的帮助 这是我正在使用的一段代码 this.state = { logo: 'star-o', check: false }; saveFavourite = (data) => { this.state.check === false ? this.setState({logo:'star', check:true}) : this.setState({l

我是个新来的土生土长的人,所以如果这很简单,请原谅我的问题。我试图在列表视图中切换图标。我该怎么做?非常感谢你的帮助

这是我正在使用的一段代码

this.state = {
  logo: 'star-o',
   check: false
};



 saveFavourite = (data) => {
   this.state.check === false ? this.setState({logo:'star', check:true}) : this.setState({logo:'star-o', check:false})
} 


<TouchableOpacity onPress={() => this.saveFavourite(data)}>
   <Icon name={this.state.logo} size={30} />
</TouchableOpacity>
this.state={
徽标:“star-o”,
检查:错误
};
SaveFavorite=(数据)=>{
this.state.check==false?this.setState({logo:'star',check:true}):this.setState({logo:'star-o',check:false})
} 
此.saveFavorite(数据)}>


它不会更改图标。

首先,我可以通过您的代码猜测您正在持有列表视图的组件中解决此问题。这是错误的,因为你不能为每个“可爱”的组件定义一个状态,主要是因为你无法事先知道它们有多少。相反,如果道具喜欢或不喜欢此组件,则应尝试将其设置为虚拟组件并接收

然后,您应该在组件中放置一个回调函数,以执行来自父组件的代码。大概是这样的:

class MyListComponent extends React.Component {
   state = {
     items: [
        { text: 'Some text', loved: false },
        { text: 'Some text2', loved: true },
     ],
   }

   toggleLoved() => {
     // your logic here
   }

   render() {
     return(
       <FlatList
          data={this.state.items}
          renderItem={(item) => {
              <MyLoveableComponent
                loved={item.item.loved}
                onLoved={ () => this.toggleLoved() }
          }/>
      );
   }

}




const MyLoveableComponent = ({ loved, onLoved, logo }) => {
      return(
        <TouchableOpacity 
           onPress={() => {
               setFavourite();
               onLoved();
        }>
          <Icon name={logo} size={30} />
        </TouchableOpacity>);
    }
}
MyListComponent类扩展了React.Component{ 状态={ 项目:[ {text:'Some text',loved:false}, {text:'Some text2',loved:true}, ], } toggleLoved()=>{ //你的逻辑在这里 } render(){ 返回( { this.toggleLoved()} }/> ); } } const MyLoveableComponent=({loved,onLoved,logo})=>{ 返回( { setfavorite(); onLoved(); }> ); } }
检查组件容器设计模式,并提醒组件应尽可能为虚拟组件。

谢谢您的回答。我会尝试一下,让你知道这是一个很大的重构。如果有任何疑问,请发表评论。如果对你有用,记得接受答案;)如果我将此类数据>项[{text:'Some text',loved:false},{text:'Some text2',loved:true}]存储为本地json文件,如何更新这些数据>项?您应该尝试将这些值存储在AsyncStorage中,或者使用Redux和Redux Persist这样做。如果不是,您的数据将永远是静态的。当前,我将数据存储为以下(data.js)项:[{text:'Some text',loved:false},{text:'Some text2',loved:false},],当我按下savefavorite()时,它将存储到AsyncStorage中并更新loved:true。我这样做对吗?