Javescript는 어레이에서 요소를 자동으로 제거합니다.
javascript와 Vuex는 처음입니다.
나는 많이 가지고 있다Orders
테이블에서(와 관련지어)state.runningOrders.data
이 주문들을 선택하고 취소했습니다(그 결과, 이 주문들은CANCEL_ONE_ORDER
서버로부터의 응답이 도착했을 때, 지정된 ID의 주문을 어레이에서 삭제했기 때문에, 테이블에서 확장 행이 없어집니다.취소 후에는 행이 없어야 합니다.하지만 시각적으로 볼 때 항상 몇 가지rows
테이블 위에 남겨져 있습니다.
여러 개의 나사산이나 코루틴처럼 작동하는 것 같아요.그래서...state.runningOrders.data
동시성 메키니즘이 필요해요
const actions = {
async [CANCEL_ONE_ORDER](context, data) {
const data_res = await RestClient.get("cancel_one_order", data.id +"/" + data.coin1+"/"+data.coin2);
context.commit(CANCEL_ONE_ORDER_END, data_res.data);
},
}
const mutations = {
[CANCEL_ONE_ORDER_END](state, res) {
state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);
},
}
어레이에서 요소를 (동시에) 삭제하는 방법
여러 개의 나사산이나 코루틴처럼 작동하는 것 같아요.
아니요. JavaScript는 영역별로(대략 글로벌 환경별로) 단일 스레드를 실행합니다.여러 스레드를 사용할 수 있지만 명시적인 공유 메모리 이외에는 동일한 데이터 구조에 액세스할 수 없습니다(대신 메시징을 통해 통신합니다).(로직 입력)async
기능 A가 일시 중지된 경우 기능이 중복될 수 있습니다.await
기능 B가 계속됩니다).
splice
삭제된 요소의 배열을 반환합니다.Yopu는 이 변수를 변수에 다시 할당하고 있습니다.
state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);
그것은 당신이 원하는 것과 정반대입니다.갱신하다data
보존할 요소가 아닌 삭제한 요소의 배열로 표시됩니다.
대신 다음을 사용합니다.
state.runningOrders.data = state.runningOrders.data.filter(item => item.id !== id);
그러면 콜백 테스트와 일치하는 요소(이 경우 일치하지 않는 요소)에서 새로운 배열이 생성됩니다.id
).
완전히 이해했는지 모르겠지만 테이블에서 행을 삭제하려고 하면(데이터베이스에서 오브젝트일 수 있음) 빈 행으로 끝납니다.
그 설명으로 보아 당신은 오브젝트를 삭제하는 것이 아니라 오브젝트 내의 데이터를 삭제하는 것 같습니다.그러면 빈 객체가 남아 빈 행이 생성됩니다.
언급URL : https://stackoverflow.com/questions/69810981/javescript-remove-elements-from-array-atomically
'programing' 카테고리의 다른 글
서브클래스는 개인 필드를 상속합니까? (0) | 2022.08.29 |
---|---|
Vue.js : Vuex의 상태 속성 데이터는 얼마나 지속됩니까? (0) | 2022.08.29 |
재사용 가능한 폼 Vue 구성 요소 생성 방법 (0) | 2022.08.29 |
Clojure에서 GUI를 실행하는 가장 좋은 방법은 무엇입니까? (0) | 2022.08.29 |
Vuex는 변환 핸들러 외부의 vuex 저장소 상태를 변환하지 않음 - Vuetify (0) | 2022.08.29 |