can*_*ket 6 reactjs redux redux-form react-redux
我在单个组件中创建多个表单并使用redux存储初始化它我在元素中定义表单的name属性<form>,而不是在reduxForm()帮助程序中,这里记录了...
我正在从'listing'对象创建表单并将其传递给我的组件mapStateToProps().我试图设置表单的初始值initialValues={},但Redux Form产生以下错误,并要求在reduxForm()帮助程序中声明表单...
1)失败的道具类型:道具form被标记为必需Form(ItemInfo),但其值为undefined.
2)initialValues标签上的未知道具.从元素中删除此prop.
这似乎与这里提到的问题相似......
https://github.com/erikras/redux-form/issues/28
import _ from 'lodash';
import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import * as actions from '../../../actions';
import {Col} from 'react-grid-system';
import RaisedButton from 'material-ui/RaisedButton';
class ItemInfo extends Component {
renderSingleItem(item){
let theItem = _.map(_.omit(item, '_id'), (value,field) => {
return (
<div key={field}>
<label>{field}</label>
<Field component="input" type="text" name={field} style={{ marginBottom: '5px' }} />
<div className="red-text" style={{ marginBottom: '20px' }}>
</div>
</div>
);
});
return theItem || <div></div>;
}
renderItemInfo() {
if (this.props.listing.listing !== undefined) {
let theItems = _.map(this.props.listing.listing.items, item => {
return (
<Col key={item._id} md={3}>
<form form={`editItemInfo_${item._id}`} initialValues={item}>
{this.renderSingleItem(item)}
<RaisedButton secondary={true} label="Remove Item"/>
<RaisedButton primary={true} label="Update Item"/>
</form>
</Col>
);
});
return theItems || <div></div>;
}
}
render() {
return (
<div className="row">
{this.renderItemInfo()}
</div>
);
}
}
function mapStateToProps({listing}) {
return { listing };
}
ItemInfo = reduxForm({
fields: ["text"],
enableReinitialize: true
})(ItemInfo)
ItemInfo = connect(mapStateToProps,actions)(ItemInfo)
export default ItemInfo
Run Code Online (Sandbox Code Playgroud)
这是返回'listing'对象的一个例子......
{ _id: 59b5eebd33a3a833b6ac1386,
_user: 59aff09a11011f0cfd8d7666,
location: 'nother',
availability: 'jhkvljh',
price: 9860,
__v: 0,
items:
[ { equipmentType: 'kbj;kj',
make: ';jb',
model: ';;jb',
watts: 9860,
bulb: 'kjbkj',
condition: 'kjbkjb',
_id: 59b5eebd33a3a833b6ac1387 },
{ condition: 'houy',
bulb: 'jhg',
watts: 8907,
model: 'mode',
make: 'maker',
equipmentType: 'smoquip',
_id: 59b5f9cf13b37234ed033a75 } ] }
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我终于找到了一个小技巧的解决方法。看来这是 Redux Form 的一部分错误和我最初实现的一部分错误。
正确实施
正如@erikras 所详述,Redux 表单创建者...
https://github.com/erikras/redux-form/issues/28
表单配置参数需要传递给装饰组件而不是 jsx<form>组件。为此,我将表单重构为导入的子组件并映射到这些组件上......
renderItemForms() {
if (this.props.listing.listing !== undefined) {
return _.map(this.props.listing.listing.items, item => {
return (
<ItemInfo form={`editItemInfo_${item._id}`} initialValues={item} key={item._id} item={item} />
);
});
}
}
Run Code Online (Sandbox Code Playgroud)
Redux 表单错误
上面的实现将您的表单正确连接到 redux 存储,但它仍然会创建一个“失败的道具类型:道具表单被标记为必需”错误,这会破坏您的观点。我找到的解决方案是在redux-form选项的“表单”属性中粘贴任何随机字符串以防止错误...
ItemInfo = reduxForm({
form: 'any random string here',
fields: ["text"],
enableReinitialize: true
})(ItemInfo)
Run Code Online (Sandbox Code Playgroud)
第二个错误消息initialValues只出现在第一个“表单参数”错误之后,所以现在一切都没有错误,在 Redux 开发工具中,我可以确认内嵌表单属性正在覆盖reduxForm()选项中的属性。表单现在由 redux 存储成功管理,并使用正确的“表单名称/ID”...
我希望这有助于避免其他人头痛。请原谅我上面解释中任何不正确的术语,我仍然是 Redux/React 菜鸟,但如果有人想要更多详细信息,我很乐意提供有关我的实现的更多详细信息。
| 归档时间: |
|
| 查看次数: |
2221 次 |
| 最近记录: |