回答:
this.state.myArray.push('new value')
配列自体ではなく、拡張配列の長さを返します。Array.prototype.push()。
返される値は配列であると思います。
それはむしろReactの動作のようです:
this.stateを直接変更しないでください。後でsetState()を呼び出すと、行った変更が置き換えられる可能性があります。this.stateを不変であるかのように扱います。React.Component。
おそらく、次のようにします(Reactに慣れていない)。
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
setState()
コンポーネントの状態への変更をエンキューし、Reactにこのコンポーネントとその子を更新された状態で再レンダリングする必要があることを伝えます。 そのため、設定直後はまだ更新されていないようです。コードの例を投稿していただけませんか。どこに設定してログに記録しているかを確認できますか?
.concat('new value');
なければならない .concat(['new value']);
concat()
メソッドに対して完全に有効です。参照:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…(新しい配列に連結する配列または値、あるいはその両方。)
es6を使用すると、次のように実行できます。
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
this.props
とthis.state
非同期で更新することができる、あなたは次の状態を計算するため、それらの値に依存しないでください。」配列を変更する場合、配列はのプロパティとして既に存在し、this.state
その値を参照して新しい値を設定する必要があるためsetState()
、以前の状態の関数を引数として受け入れるの形式を使用する必要があります。例:this.setState(prevState => ({ myArray: [...this.state.myArray, 'new value'] }));
参照:reactjs.org/docs/...
状態を直接変更することはお勧めしません。
後のバージョンのReactで推奨されるアプローチは、競合状態を防ぐために状態を変更するときに更新関数を使用することです。
文字列を配列の最後にプッシュします
this.setState(prevState => ({
myArray: [...prevState.myArray, "new value"]
}))
文字列を配列の先頭にプッシュします
this.setState(prevState => ({
myArray: ["new value", ...prevState.myArray]
}))
オブジェクトを配列の最後にプッシュします
this.setState(prevState => ({
myArray: [...prevState.myArray, {"name": "object"}]
}))
オブジェクトを配列の先頭にプッシュします
this.setState(prevState => ({
myArray: [ {"name": "object"}, ...prevState.myArray]
}))
this.setState((prevState) => ({ myArray: [values, ...prevState.myArray], }));
状態をまったく操作しないでください。少なくとも、直接ではありません。配列を更新したい場合は、次のようにします。
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
状態オブジェクトを直接操作することは望ましくありません。Reactの不変性ヘルパーもご覧ください。
.slice()
は新しい配列を作成して不変性を維持するためにも使用します。助けてくれてありがとう。
このコードは私のために働きます:
fetch('http://localhost:8080')
.then(response => response.json())
.then(json => {
this.setState({mystate: this.state.mystate.push.apply(this.state.mystate, json)})
})
fetch(`api.openweathermap.org/data/2.5/forecast?q=${this.searchBox.value + KEY} `) .then( response => response.json() ) .then( data => { this.setState({ reports: this.state.reports.push.apply(this.state.reports, data.list)}); });
this.state = { reports=[] }
。つまり... pls私は私が間違っていることを知りたいです
次のようにして、オブジェクトをチェックして更新できます
this.setState(prevState => ({
Chart: this.state.Chart.length !== 0 ? [...prevState.Chart,data[data.length - 1]] : data
}));
console.log(this.state.myArray)
するとき、それは常に後ろにあります。なぜだと思いますか?