【发布时间】:2021-04-26 17:36:27
【问题描述】:
我已经为此苦苦挣扎了很长时间。我试图创建一个减速器,以便能够将一个项目添加到收藏夹列表中。我可以创建一个状态对象并使用 useState 将 id 保存到状态对象中,但是在尝试使用 Redux 做同样的事情时遇到了障碍。
这是我的 favicon.js
import React, {useState} from 'react'
import { FontAwesome } from '@expo/vector-icons'
import { View, TouchableOpacity,StyleSheet, Text, Alert } from 'react-native'
import { connect } from 'react-redux'
import { toggleFavId, isFavourite } from '../actions'
const FavIcon = ({recipeid, toggle, isFav, text}) => {
const [isFavNew, setFavNew] = useState(false)
const toggleFav = (recipeid) =>{
setFavNew(!isFavNew)
console.log(`Entered toggle ${recipeid} isfavnew = ${isFavNew}`)
}
return (
<View>
<TouchableOpacity style={styles.favItem} onPress={() => {toggleFav(recipeid)}}>
<FontAwesome name={isFavNew == true ? 'heart' : 'heart-o'} size={40} color='red' />
<Text> {text}</Text>
</TouchableOpacity>
</View>
)
}
const mapStateToProps = (state) =>({
favids: state.favids,
})
const mapDispatchToProps = (dispatch) => ({
toggle: (recipeid) => dispatch(toggleFavId(recipeid)),
isFav: (recipeid) => dispatch(isFavourite(recipeid)),
})
export default connect(mapStateToProps,mapDispatchToProps)(FavIcon)
这是我的减速器,但它不正确,因为我似乎无法提取项目的状态。
import {TOGGLE, IS_FAVOURITE} from '../actions'
export const favids = (state=[], action) => {
const {type, recipeid} = action
const newRecipe = {
id: recipeid,
is_fav: false,
}
switch (type) {
case TOGGLE: {
if (state.includes(recipeid)===true) {
return state.filter((state) => state.id !== recipeid)
}
else {
return state.concat(recipeid)
}
}
case IS_FAVOURITE: {
return state.map(item=>{
if(item.recipeid === recipeid){
item.is_fav = !item.is_fav
}
})
}
default:
return state
}
}
我正在尝试创建reducer 以复制FavIcon 中的toggleFav 函数。
const toggleFav = (recipeid) =>{
setFavNew(!isFavNew)
控制台.log(Entered toggle ${recipeid} isfavnew = ${isFavNew})
}
如果单击图标,我要做的就是切换收藏夹中的食谱。 任何帮助将不胜感激。
【问题讨论】:
标签: reactjs react-native redux react-redux reducers