私のフォームの状態をLoginFormコンポーネントの小道具にマップしようとしていて、状態がundefined
と表示されています。 HERE状態を反応中の小道具にマッピングするときの未定義状態
import React, { PropTypes } from 'react';
import { reduxForm, getFormValues } from 'redux-form/immutable';
import { connect } from 'react-redux';
import { logUserIn } from '../../actions/authentication';
import { VALID_EMAIL_REGEX } from '../../config/app_config';
import LoginForm from './LoginForm';
const FORM_ID = 'loginForm';
export class LoginFormContainer extends React.Component {
static propTypes = {
handleSubmit: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
loginAction: PropTypes.func.isRequired,
values: PropTypes.object.isRequired,
};
performLogin = (params) => {
const { loginAction } = this.props;
const credentials = {
email: params.email,
password: params.password,
};
loginAction(credentials, '/home');
}
render() {
const { handleSubmit, submitting, values, ...others } = this.props;
console.log(values); // <--- undefined
return (
<LoginForm
handleSubmit={ handleSubmit }
loginFunction={ this.performLogin }
submitting={ submitting }
{...others}
/>
);
}
}
// there is a validate method here
LoginFormContainer = reduxForm({
form: FORM_ID, // <--- loginForm
validate,
})(LoginFormContainer);
const mapStateToProps = (state) => {
const values = getFormValues(FORM_ID)(state);
return {
values,
};
};
export default connect(mapStateToProps, {
loginAction: logUserIn,
})(LoginFormContainer);
はLoginFormコンポーネントです:
import React, { PropTypes } from 'react';
import { Field, Form } from 'redux-form/immutable';
import { getClassName } from '../../utils/forms';
import { Link } from 'react-router';
// import { checkButtonDisabled } from '../../utils/forms';
const renderInput = ({ input, label, type, meta: { touched, error } }) => {
return (
<div className={ getClassName(touched, error) }>
<label className="form-control-label">
{ label }
{touched && error &&
<span className="error">{ error }</span>}
</label>
<input
{ ...input }
className="form-control form-control-success"
type={ type }
/>
</div>
);
};
export default class LoginForm extends React.Component {
static propTypes = {
handleSubmit: PropTypes.func.isRequired,
loginFunction: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired,
};
render() {
const {
handleSubmit,
loginFunction,
submitting } = this.props;
return (
<Form id="loginForm" onSubmit={ handleSubmit(loginFunction.bind(this)) }>
<fieldset>
<Field
name="email"
component={renderInput}
type="text"
placeholder="[email protected]"
label="Email address"
/>
<Field
name="password"
component={renderInput}
type="password"
placeholder="your password"
label="Password"
/>
</fieldset>
<button
type="submit"
className="btn btn-primary"
disabled={ submitting }
>
Log In
</button>
<Link to="/forgot-password">Forgot Password?</Link>
</Form>
);
}
}
私は小道具にだけ状態をマッピングし、それをログコンソール場合、それはまたundefined
として戻ってきます。
私は、送信ボタンの条件を無効にするための値を取得しようとしていますが、状態が未定義のため、フォームの値を取得するためにredux-formメソッドを実行するフォーム状態にアクセスできません。ここで
は、状態の写真です:
誰もが問題になる可能性がどのようなスポット?
'form'に' loginForm'がありますか? – Andrew
コンソールに表示されている状態を示す画像を添付しました。 –
loginActionの前にloginFormがないか、別のアクションのfillステートになっているようです。 'const values = form.loginForm && form.loginForm.values? 'を確認してみてください。 form.loginForm.values:null; ' – Andrew