概要
react-redux環境で、StateのSlice内でstateの型はProxyで返されるが、
参照するときは特に意識せず使えるのはなぜなのか。
該当のソースコード
- SamplePage1.js
JavaScript
1import { createSlice } from "@reduxjs/toolkit"; 2 3const initialState = { 4 arrayData1: [], 5} 6 7const sampleSlice = createSlice({ 8 name: "sampleSlice", 9 initialState: initialState, 10 reducers: { 11 sampleReducer: (state) => { 12 console.log(state.arrayData1) 13 console.log(typeof state.arrayData1) 14 let newArray = state.arrayData1.concat(); 15 newArray.push("a"); 16 console.log(newArray); 17 return Object.assign({}, state, { 18 arrayData1: newArray, 19 }) 20 }, 21 dataConsumer: (state) => { 22 let newArray = state.arrayData1.concat(); 23 console.log(state.arrayData1); 24 //Proxy {0: {...}} 25 //[[Handler]]: null 26 //[[Target]]: null 27 //[[IsRevoked]]: true 28 console.log(newArray); 29 //['a', 'a'] 30 state.arrayData1.forEach((chr) => { 31 console.log(chr); 32 //'a' 33 }) 34 newArray.forEach((chr) => { 35 console.log(chr); 36 //'a' 37 }) 38 } 39 } 40}) 41 42export default sampleSlice; 43 44export function sampleReducer() { 45 return { 46 type: "sampleSlice/sampleReducer", 47 } 48} 49 50export function dataConsumer() { 51 return { 52 type: "sampleSlice/dataConsumer", 53 } 54}
質問
上記コードの、22~36行目部分の出力についてお聞きしたいです。
コメントアウト部分がコンソールに出力される値です。
- state.arrayData1はArray型ではないのはなぜか
- proxyのHandler, Targetはどちらもnullであるが、forEachで値を取得できるのはなぜか
試したこと
- ProxyについてMDN Web Docsを参照
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy
いずれもtargetがnullではないProxyだったので値を取得できる理由が分かりませんでした。
補足情報(FW/ツールのバージョンなど)
react 17.0.1
react-redux 7.2.6
redux 4.1.2

あなたの回答
tips
プレビュー