質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.68%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

1043閲覧

react-redux state.xxxで返されるProxyと仕組み

marusa

総合スコア16

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/01/24 12:54

概要

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で値を取得できるのはなぜか

試したこと

補足情報(FW/ツールのバージョンなど)

react 17.0.1
react-redux 7.2.6
redux 4.1.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.68%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。