我正在尝试用来自API的数据填写个人资料表单。不幸的是,在这种情况下,redux-form不想与我合作。由于某些原因,无论我做什么,字段都保持为空。
出于某些原因,设置固定值而不是从reducer传递的值效果很好。
也许这是因为我在动作创建者内部对API调用使用了 redux-promise ?我如何忍受它并摆脱它。这是我的表单组件。
import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import { fetchRoleList, fetchUserData } from '../actions';
class UserEdit extends Component {
componentWillMount() {
this.props.fetchRoleList();
this.props.fetchUserData();
}
handleEditProfileFormSubmit(formProps) {
console.log(formProps);
}
getRoleOptions(selected_id) {
if (!this.props.profile) {
return <option>No data</option>;
}
return this.props.profile.roles.map(role => {
return <option key={role.role_id} value={role.role_id}>{role.name}</option>;
});
}
renderField(props) {
const { input, placeholder, label, value, type, meta: { touched, error } } = props;
return (
<fieldset className={`form-group ${ (touched && error) ? 'has-error' : '' }`}>
<label>{label}</label>
<input className="form-control" {...input} type={type} placeholder={placeholder} />
{touched && error && <div className="error">{error}</div>}
</fieldset>
);
}
renderSelect({ input, placeholder, options, label, type, meta: { touched, error } }) {
return (
<fieldset className={`form-group ${ (touched && error) ? 'has-error' : '' }`}>
<label>{label}</label>
<select className="form-control" {...input}>
{options}
</select>
{touched && error && <div className="error">{error}</div>}
</fieldset>
);
}
render() {
const { handleSubmit } = this.props;
const user = this.props.profile.user;
return (
<div> {user ? user.email : ''}
<form onSubmit={handleSubmit(this.handleEditProfileFormSubmit.bind(this))}>
<Field name="email" label="Email:" component={this.renderField} type="text" placeholder="email@gmail.com" className="form-control"/>
<Field name="name" label="Name:" component={this.renderField} type="text" placeholder="John Doe" className="form-control"/>
<Field name="role" label="Role:" component={this.renderSelect} type="select" className="form-control" options={this.getRoleOptions()}/>
<button action="submit" className="btn btn-primary">Edit user</button>
<Field name="password" label="Password:" component={this.renderField} type="password" className="form-control"/>
<Field name="passwordConfirm" label="Confirm Password:" component={this.renderField} type="password" className="form-control"/>
{ this.props.errorMessage
&& <div className="alert alert-danger">
<strong>Oops!</strong> {this.props.errorMessage}
</div> }
<button action="submit" className="btn btn-primary">Sign up!</button>
</form>
</div>
);
}
}
let InitializeFromStateForm = reduxForm({
form: 'initializeFromState'
})(UserEdit);
InitializeFromStateForm = connect(
state => ({
profile: state.profile,
initialValues: state.profile.user
}),
{ fetchRoleList, fetchUserData }
)(InitializeFromStateForm);
export default InitializeFromStateForm;
我相信动作创建者也将很有用:
export function fetchUserData(user_id) {
user_id = user_id ? user_id : '';
const authorization = localStorage.getItem('token');
const request = axios.get(`${ROOT_URL}/user/${user_id}`, {
headers: { authorization }
});
return {
type: FETCH_USER,
payload: request
};
}
您需要添加enableReinitialize: true
如下内容。
let InitializeFromStateForm = reduxForm({
form: 'initializeFromState',
enableReinitialize : true // this is needed!!
})(UserEdit)
如果您的initialValues属性得到更新,那么您的表格也会更新。
问题内容: 我有一个连接到我的应用程序状态的redux表单,一切似乎都很好。我可以获取数据并将其加载到表单中,然后提交数据并获取所需的元数据… 但是,我有一个自定义交互(颜色选择器),需要动态更改托管字段的值。我尝试的所有操作都将更改屏幕,但不会更改redux表单状态,即,当我提交表单时,我只会获取原始字段数据,而不是表单中显示的新数据。 下面的版本将字段属性传递给组件,并尝试使用ColorSel
使用Redux表单中的initializingFromState示例,我试图动态地设置它。这是为了编辑书籍列表中的特定书籍,并使用在express.js中设置的简单api。 完整的容器在下面。不知何故,我需要在mapStateToProps函数中传入。在这个例子中,它是通过一个静态对象完成的,但是我不知道如何使用我通过获取的信息,并将其传递给。 容器: 谢谢你。
本文向大家介绍Redux怎样设置初始状态?相关面试题,主要包含被问及Redux怎样设置初始状态?时的应答技巧和注意事项,需要的朋友参考一下 它必须是createStore的第二个参数: const rootReducer = combineReducers({ todos: todos, visibilityFilter: visibilityFilter }); const initialSta
考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则
问题内容: 我试图弄清楚如何为redux中的商店设置初始状态。我以https://github.com/reactjs/redux/blob/master/examples/todos- with- undo/reducers/index.js 为例。我试图修改代码,以便待办事项已初始化一个值。 按照文档操作:http : //redux.js.org/docs/api/createStore.h
问题内容: 使用v7时,我发现无法设置字段值。现在,在我中,我有两个部分。当第一个组件值更改时,第二个值将清除。 在课堂上渲染: 现在,我添加了更改钩子,以及如何更改其他值 问题答案: 您可以使用onChange逻辑并使用redux-form中的操作 根据文档: change(field:String,value:any):函数 更改Redux存储中字段的值。这是绑定动作的创建者,因此不返回任何内