私は反応が非常に新しいですし、チェックボックスを作成しようとしており、また、選択したチェックボックスの名前リストをテキストボックスに表示しようとしています。選択されたボックスの値を保存するために選択された[]を使用していて、[]をチェックしてそのボックスがチェックされているかどうかをチェックしています。反応の配列インデックス値を更新する
コードは正常に動作しますが、私はforceupdate()の使用を避け、setState()を使用します。私が使用すると、それを使って選択した[]値を更新できません。誰かがsetstateを使って特定の配列インデックス値を更新する方法を教えてくれますので、自身がレンダリングされ、forceupdate()を使う必要はありませんか?
ありがとうございました。
var history = React.createClass({
getInitialState : function(){
return {
checked : [],
selected: []
};
},
componentWillMount : function(){
},
handleChangechk: function (e){
const target = e.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
if(value===true)
{
this.state.checked[name]= true;
this.state.selected[name] = name;
this.forceUpdate();
}
else
{
this.state.checked[name]= false;
this.state.selected[name] = '';
this.forceUpdate();
}
},
render : function() {
var historyList = [];
var selectedList = [];
for (var i = 0; i < 10; i++) {
historyList.push(<span key={i}><input type="checkbox" name = {i} checked={!!this.state.checked[i]} onChange ={(e)=> this.handleChangechk(e)}/><span ></span><label >checkbox {i}</label></span>);
if(this.state.selected[i])
{
selectedList.push(this.state.selected[i]);
}
};
return( /* display selected checkbox (selectedList); */}});
を、それがスローされますエラー、それは 'this.state.checked:newState'の代わりに 'checked:newChecked'でなければなりません:) –
Thanks CesarとMayankは同じコードに対してうまく動作します。警告が表示されます:" Warning:Failed form propType:You provide 'onChange'ハンドラのないフォームフィールドに' value' propを作成しました。これにより、読み取り専用フィールドがレンダリングされます。フィールドが変更可能な場合は、 'defaultValue'を使用してください。それ以外の場合は、onChangeまたはreadOnlyのいずれかを設定します。レンダリングの方法をチェックしてください... "どのようにしたら取り除くことができますか? –
@MayankShuklaの修正をありがとう:Jayant、彼の素晴らしい答えをチェックしてください。 –