Javascript 如何传递作为状态一部分的“编辑”对象并返回该已编辑对象?
我有一个这样的目标:Javascript 如何传递作为状态一部分的“编辑”对象并返回该已编辑对象?,javascript,reactjs,redux,lodash,Javascript,Reactjs,Redux,Lodash,我有一个这样的目标: Object{} 此对象内部有其他对象,但由键标记,如下所示: Object{1: Object, 2: Object, 3: Object} 我希望能够选择这些对象中的一个,或者通过仅使用键的值进行编辑。假设对象1是一个具有 1: Object { title: "yay Im a title", description: "yay Im a desc", quantity: 1 } 我希望能够得到一个类似于1的值,并且能够取出键为1的特定对
Object{}
此对象内部有其他对象,但由键标记,如下所示:
Object{1: Object, 2: Object, 3: Object}
我希望能够选择这些对象中的一个,或者通过仅使用键的值进行编辑。假设对象1是一个具有
1: Object {
title: "yay Im a title",
description: "yay Im a desc",
quantity: 1
}
我希望能够得到一个类似于1的值,并且能够取出键为1的特定对象,并在每次调用函数或任何东西时更新1的数量。如果这件事没有成功,请告诉我
这是我在react/redux中使用的一个项目
我将发布每个相关代码:
行动:
export function updateCart(_id, unit) {
return {
type: "UPDATE_CART",
_id: _id,
unit: unit
}
}
减速器:
case "UPDATE_CART":
let foundBook = _.get(state, action._id);
//Stuck here, want to update quantity by one and return the item
break;
在其中调用操作的组件:
import React , { Component } from 'react';
import {connect} from 'react-redux';
import {addToCart, updateCart} from '../../actions/cartActions';
class BookItem extends Component {
handleCart() {
const book = {
_id: this.props._id,
title: this.props.title,
description: this.props.description,
price: this.props.price,
quantity: 1
}
if(Object.keys(this.props.cart).length > 0) {
let _id = this.props._id;
let cartIndex = _id in this.props.cart;
if(!cartIndex) {
this.props.addToCart(book);
} else {
this.props.updateCart(_id, 1);
}
} else {
this.props.addToCart(book);
}
}
render() {
return (
<div className="well">
<div className="row">
<div className="col-xs-12">
<h6>{this.props.title}</h6>
<p>{this.props.description}</p>
<h6>{this.props.price}</h6>
<button onClick={this.handleCart.bind(this)} className="btn btn-primary">Buy now</button>
</div>
</div>
</div>
);
}
}
function mapStateToProps(state) {
return {
cart: state.cart
}
}
export default connect(mapStateToProps, {addToCart, updateCart})(BookItem);
import React,{Component}来自'React';
从'react redux'导入{connect};
从“../../actions/cartActions”导入{addToCart,updateCart};
类BookItem扩展组件{
handleCart(){
常数书={
_这个。道具。_id,
标题:this.props.title,
description:this.props.description,
价格:这个。道具。价格,
数量:1
}
if(Object.keys(this.props.cart).length>0){
让_id=this.props._id;
在this.props.cart中,让cartinex=_id;
如果(!cartinex){
这个.props.addToCart(书);
}否则{
this.props.updateCart(_id,1);
}
}否则{
这个.props.addToCart(书);
}
}
render(){
返回(
{this.props.title}
{this.props.description}
{this.props.price}
立即购买
);
}
}
函数MapStateTops(状态){
返回{
购物车:state.cart
}
}
导出默认连接(MapStateTops,{addToCart,updateCart})(BookItem);
希望这不会让我现在感到困惑,但根据我的要求,我发布了我正在做的工作,希望能有所帮助 一种非常基本的方法可能是创建一个将对象、键和可选函数作为参数的函数。如果函数作为第三个参数提供,则将根据具有给定键的子对象(如果位于)对其求值。返回子对象(如果找到) 使用
hasOwnProperty
可以定位仅属于父对象而不是从原型继承的子对象
function extract(obj, key,fn) {
if (obj === null || typeof obj !== 'object' ||
key === null || !obj.hasOwnProperty(key) || typeof obj[key] !== 'object' ||
obj[key] === null)
return null;
if (typeof fn === 'function' && fn !== null)
fn(obj[key]);
return obj[key];
}
基于什么,您希望能够返回像1这样的值?为了“找回”1,你打算付出什么?请注意,可以使用方括号使用动态键访问属性值:
key=1;myTitle=myObject[key].title
我能够通过使用lodash和var foundItem=uu.get(state,1);,从大对象中获取对象。这返回了我想要的对象及其所有属性,现在我需要能够编辑该对象并仍然返回其所有旧属性。这太模糊了。请发布您的代码和期望的结果。顺便说一句,你的问题中没有提到州
。尽可能具体。更新代码。抱歉搞混了