我的React-Native
应用程序正在与Redux
一起运行,并且正在尝试将嵌套数组项(产品)添加到我的商店中。
屏幕应该如何工作?
productScreen
的数据从上一个传递
屏幕(选定产品)FlatList
可以工作吗?
productScreen
的数据从上一个传递
屏幕(选定产品)FlatList
不起作用的是:
当我导航到屏幕时,出现错误this.props.onPress(row)不是一个函数。 this.props.onPress(row)未定义。
我尝试过在线寻找解决方案,并在官方Redux网页上寻找解决方案,但是找不到解决此难题的方法。在我嵌套数组并将产品显示在单独的组件上,然后将其加载到页面上之前,它确实可以正常工作。
有人知道如何将嵌套数组添加到商店吗?
FlatList
<FlatList
style={styles.listContainer}
data={this.state.filteredProducts}
renderItem={this.renderItem}
keyExtractor={(item, index) => index.toString()}
/>
RenderItem
renderItem = ({item}) => {
let items = [];
if( item.products) {
items = item.products.map(row => {
return (<View key={row.id} style={styles.products}>
<View style={styles.iconContainer}>
<Icon name={row.icon} color="#DD016B" size={25} />
</View>
<View style={styles.text}>
<Text style={styles.name}>
{row.name}
</Text>
<Text style={styles.price}>
€ {row.price}
</Text>
</View>
{console.log('renderItem',this.state.row)}
<View style={styles.buttonContainer} onPress={this.props.addItemToCart} >
<TouchableOpacity onPress={this.props.onPress(row)} >
<Icon style={styles.button} name="ios-add" color="white" size={25} />
</TouchableOpacity>
</View>
<View style={styles.buttonContainer} onPress={this.props.removeItem} >
<TouchableOpacity onPress={() => this.props.onPress(row)} >
<Icon style={styles.button} name="ios-remove" color="white" size={25} />
</TouchableOpacity>
</View>
</View>)
})
}
将产品添加到商店
const mapDispatchToProps = (dispatch) =>{
return{
addItemToCart:(product) => dispatch({
type:'ADD_TO_CART', payload: product, qty
}),
removeItem:(product) => dispatch ({
type:'REMOVE_FROM_CART' , payload: product, qty
})
}
}
export default connect(null, mapDispatchToProps) (ProductScreen);
Store.JS
import {createStore} from 'redux';
import cartItems from '../reducers/carItems';
export default store = createStore(cartItems)
cartItems.JS
const cartItems = (state = [], action) => {
switch (action.type)
{
case 'ADD_TO_CART':
// console.log('CarItems.JS', action.payload)
if (state.some(cartItem => cartItem.id === action.payload.id)) {
// increase qty if item already exists in cart
return state.map(cartItem => (
cartItem.id === action.payload.id ? { ...cartItem, qty: cartItem.qty + 1 } : cartItem
));
}
return [...state, { ...action.payload, qty: 1 }]; // else add the new item to cart
case 'REMOVE_FROM_CART':
return state
.map(cartItem => (cartItem.id === action.payload.id ? { ...cartItem, qty: cartItem.qty - 1 } : cartItem))
.filter(cartItem => cartItem.qty > 0);
}
return state
}
export default cartItems
答案 0 :(得分:2)
您似乎正在将函数调用的结果传递给TouchableOpacity的onPress属性。
您可能想尝试更改
<TouchableOpacity onPress={this.props.onPress(row)} >
至
<TouchableOpacity onPress={() => this.props.onPress(row)} >
就像您在第二种情况下所做的一样。