私はredux-formを使用してサインインフォームをレンダリングし、ユーザーがユーザー名とパスワードを入力できる同形アプリを持っています。Isomorphic Reactアプリ - JSがオフのときにフォーム提出を処理する方法
これはすべてクライアント側でうまく動作しますが、JSをオフにすると、フォームからAPIを介して値を取得できないようです。
NB:フォームがGETの場合、値はURLにクエリパラメータとして表示されますが、機密データを表示したくないことは明らかです。
class SignIn extends Component {
static propTypes = {
errorMessage: PropTypes.string,
handleSubmit: PropTypes.func,
signinUser: PropTypes.func
}
statics = {
fields: [
{
name: 'email',
label: 'Email'
},
{
name: 'password',
label: 'Password',
type: 'password'
}
]
}
handleFormSubmit({ email, password }) {
this.props.signinUser({ email, password });
}
// renders an alert if field has an error
renderAlert() {
if (this.props.errorMessage) {
return (
<div className='alert alert-danger'>
<strong>Oops!</strong> {this.props.errorMessage}
</div>
);
}
return false;
}
// render the field
renderField = ({ input, label, name, type, meta: { touched, error }, ...rest }) => (
<div>
<label htmlFor={name}>{label}</label>
<div>
<input {...input} {...rest} id={name} placeholder={label} type={type} />
{touched && error && <span className='error'>{error}</span>}
</div>
</div>
);
render() {
const { handleSubmit } = this.props;
return (
<form method='post' onSubmit={handleSubmit((data) => this.handleFormSubmit(data))}>
{
this.statics.fields.map((field, index) =>
<fieldset className='form-group' key={index}>
<Field
className='form-control'
component={this.renderField}
label={field.label}
name={field.name}
type={field.type || 'text'}
/>
</fieldset>
)
}
{this.renderAlert()}
<button action='submit' className='btn btn-primary'>Sign in</button>
</form>
);
}
}
及び経路:
<Route path='/' component={App}>
<IndexRoute component={Welcome} />
<Route path='/feature' onEnter={requireAuth} component={Feature} />
<Route path='/signin' component={Signin} />
<Route path='/signout' component={Signout} />
<Route path='/signup' component={Signup} />
</Route>
GETとPOSTのちょっとしたメモです。 POSTを使用すると、機密データを隠すことはできません**。投稿されたものはすべてPOSTリクエストではっきりと見えますが、別の場所(URLではなくリクエスト本体)に表示されます。機密データを第三者から隠す場合は、SSLを使用してください。ユーザーから何も隠しておきたい場合は、ブラウザに送信しないでください。 – ivarni
私は理解していませんが、ReactがJSを無効にして動作することをどのように期待しますか?そのサーバー側をレンダリングしない限り、フォームはレンダリングされません。たとえそうであっても、フォームの送信を傍受し、ブラウザでJSを有効にしないでAJAX呼び出しを行う方法はありません。 – Benja
ユニバーサル/アモルファスのアプリであるため、サーバーサイドをレンダリングしています。だから多分問題はnode.jsの増加であり、どのようにノードを傍受してノードにPOSTリクエストを行うのですか? – Paul