답변:
this.state.myArray.push('new value')
배열 자체 대신 확장 배열의 길이를 반환합니다. Array.prototype.push () .
반환 값이 배열이 될 것으로 예상합니다.
오히려 React의 동작 인 것 같습니다.
나중에 setState ()를 호출하면 만든 변형을 대체 할 수 있으므로 this.state를 직접 변형하지 마십시오. this.state를 변경 불가능한 것처럼 취급하십시오. React.Component .
나는 다음과 같이 할 것이라고 생각합니다 (React에 익숙하지 않음).
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
setState()
구성 요소 상태의 변경 사항을 대기열에 추가하고 React에이 구성 요소와 그 자식을 업데이트 된 상태로 다시 렌더링해야한다고 알려줍니다. 그래서 설정 직후에는 업데이트되지 않은 것 같습니다. 설정하고 기록하고있는 지점을 볼 수있는 코드 예제를 게시 해 주시겠습니까?
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)
항상 뒤에 하나입니다. 왜 그런지 아세요?