【发布时间】:2017-09-29 20:42:56
【问题描述】:
如何根据作为数组元素的对象的键值来定位对象。
减速机:
const initialState = {
posts: []
}
export default function newData (state = initialState, action) {
switch (action.type) {
case "updateNumber":
return {
...state,
/* How to determine which object's number I should update? */
/* The payload is the id */
number: this.state.number ++ // <== need help here.
}
default:
return state
}
}
从 API 调用返回的数据将附加到帖子中:
帖子:
[
{
id: '1',
name: 'Name One',
number: 11
},
{
id: '2',
name: 'Name Two',
number: 22
},
{
id: '3',
name: 'Name Three',
number: 33
}
]
在我正在渲染的组件中:
class Posts extends Component {
renData () {
console.log("ThePosts: ", this.props.posts);
return posts.map((post, postIndex) => {
return (
<View key = {postIndex}>
<TouchableOpacity
onPress={() => updateNumber(post.id)}
>
<Text> {post.number} </Text>
</TouchableOpacity>
</View>
)
});
}
render(){
return(
<View style={style.container}>
{this.renData}
</View>
)
}
}
function mapDispatchToProps(dispatch) {
return {
updateNumber: (id) => {
dispatch(updateNumber(id))
}
}
}
function mapStateToProps(state) {
return {
posts: state.posts,
}
}
export default connect( mapStateToProps, mapDispatchToProps ) ( Posts );
如何确定要更新哪个对象的number?
注意:我尝试了this approach,但我发现将 API 调用的数据附加到对象非常困难。使用数组更容易。
请帮忙。
【问题讨论】:
-
我不确定我是否理解正确。您可以处理在您的
TouchableOpacity上获取项目 ID,对吗?现在您要更新单击的项目number属性吗?如果是这样,这是 JavaScript 问题,您可以尝试使用Object.values(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…),它将返回一个包含所有对象属性的数组。然后可以使用.find()或.filter()来返回对应按下的id 的单项。您现在可以更新属性设置,例如post.number = 123。希望对你有帮助
标签: reactjs react-native redux react-redux