何かを投稿した後、データの状態をnullに変更した後でも、入力フィールドの値は同じままですか? 私はconsole.logged状態とポストの後にデータ状態変数が正しく空のオブジェクトに設定されているが、入力の状態は変更されません。 お知らせください。 this.state.data.firstname
がnullまたは未定義であり、入力に設定された値がすでに存在する場合空白のオブジェクトへの状態の変化に入力フィールドが応答しない
var AccountView = React.createClass({
getDefaultProps: function() {
return {
data: {},
users: [],
};
},
getInitialState: function() {
return {
data: {},
users: {},
};
},
componentDidMount: function() {
$.ajax({
url: "/react-webpack/js/source/controllers/get_accounts.php",
async: "false",
dataType: "json",
sucess: function(json) {
console.log("success!");
console.log(json);
},
error:function(x, e) {
alert(e);
},
complete: function(a, data) {
var users = JSON.parse(a.responseText);
this.setState({
users: users,
});
}.bind(this)
});
},
handleChange: function(e) {
var data = this.state.data;
data[e.target.name] = e.target.value;
this.setState({
data: data,
});
},
handleSave: function(e) {
e.preventDefault();
var users = this.state.users;
users.push(this.state.data);
$.ajax({
url: "/react-webpack/js/source/controllers/post_accounts.php",
type: "post",
data: this.state.data,
success: function(data, a) {
this.setState({
data: {},
});
}.bind(this),
error: function(e) {
},
complete: function(a, data) {
this.setState({
data: {},
users: users,
});
}.bind(this)
});
},
render: function() {
return (
<div className="container">
<form method="post">
<dl id="form" className="row">
<div className="col-md-4">
<dt>Firstname</dt>
<dd>
<input name="firstname" type="text" value={this.state.data.firstname} onChange={this.handleChange} />
</dd>
<dt>Lastname</dt>
<dd>
<input name="lastname" type="text" value={this.state.data.lastname} onChange={this.handleChange} />
</dd>
<dt>Password</dt>
<dd>
<input name="password" type="text" value={this.state.data.password} onChange={this.handleChange} />
</dd>
<dt>Email Address</dt>
<dd>
<input name="emailaddress" type="text" value={this.state.data.emailaddress} onChange={this.handleChange} />
</dd>
<dt>Submit</dt>
<dd>
<input type="submit" value="Submit" onClick={this.handleSave} />
</dd>
</div>
<div className="col-md-8">
<table>
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Password</th>
<th>Email address</th>
</tr>
</thead>
<tbody>
{_.map(this.state.users, function(user) {
return (
<tr>
<td>{user.firstname}</td>
<td>{user.lastname}</td>
<td>{user.password}</td>
<td>{user.emailaddress}</td>
</tr>
);
})}
</tbody>
</table>
</div>
</dl>
</form>
</div>
);
}
});
module.exports = AccountView;
私は 'component.forceUpdate(コールバック) 'がどうなるか気になります。 'コールバック'はあなたのsetStateコードを実行する関数です。 –
@MichaelBruce私はそれを正しくやっているのかどうかはわかりませんが、ポストAJAX呼び出しの完全なセクションでは、コールバックがsetStateコードであるthis.forceUpate(コールバック)を使用し、コードは同じように動作します – fungusanthrax
あなたのgitリンクを私に送りますか? –