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

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

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

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

React.js

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

Q&A

解決済

1回答

4276閲覧

【react】子コンポーネントから親コンポーネントへ値を渡す方法

matsuo_basho

総合スコア88

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2021/11/15 13:26

いつも大変お世話になっております。

現在reactの勉強中で、子コンポーネントから親コンポーネントへ値を渡そうとしているのですが、
warningが出てしまいます。

調べたところ子コンポーネントでuseEffect()を使用すると大丈夫とあったのですが改善されないようです。

もともとVue使いでしたが、Vueでは子コンポーネントから親コンポーネントへ値を渡すことは
普通にあったのですが、Reactの場合はあまり行わないことなのでしょうか?

以下ソースコードを記述しますので
どなたか改善すべき箇所がわかる方がいらっしゃればご教授いただけますと幸いです。

それではどうぞ宜しくお願い致します。

javascript

1 2# App.js 3 4import {BrowserRouter, Routes, Route} from "react-router-dom"; 5import Home from "./components/Home"; 6import Parent from "./components/Parent"; 7 8const App = () => { 9 return ( 10 <> 11 12 <BrowserRouter> 13 <Routes> 14 15 <Route path="/" element={<Home/>}/> 16 <Route path="/parent" element={<Parent/>}/> 17 18 </Routes> 19 </BrowserRouter> 20 21 </> 22 ) 23} 24 25export default App;

javascript

1 2# Parent.js 3 4import {Link} from "react-router-dom"; 5import Child from "./Child"; 6import {useState} from "react"; 7 8const Parent = () => { 9 10 const [value, setValue] = useState(""); 11 12 return ( 13 <> 14 15 <h3>Parent</h3> 16 <Link to="/">Homeへ</Link> 17 18 <hr/> 19 20 <Child setValue={setValue}/> 21 22 <p>子コンポーネントから渡ってきた値 → {value}</p> 23 24 </> 25 ) 26} 27 28export default Parent; 29

javascript

1 2# Child.js 3 4const Child = (props) => { 5 6 const comment = "ok react." 7 8 return ( 9 <> 10 11 {props.setValue(comment)} 12 13 </> 14 ) 15} 16 17export default Child; 18

エラー内容

Warning: Cannot update a component (`Parent`) while rendering a different component (`Child`). To locate the bad setState() call inside `Child`,

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/11/15 13:46

> 調べたところ子コンポーネントでuseEffect()を使用すると大丈夫とあったのですが改善されないようです。 useEffectを使って、どのように書きましたか?
matsuo_basho

2021/11/15 16:52

返信ありがとうございます。 以下のように記述していたのですが、 return で返しているところがいらなかったようです、、。 import {useEffect} from "react"; const Child = ({setValue}) => { const comment = "ok react." useEffect(() => { setValue(comment); }, [setValue]); return ( <> {setValue(comment)} </> ) } export default Child;
guest

回答1

0

ベストアンサー

質問にあるWarning が出る原因は、Childreturn で返しているJSXの中に
{props.setValue(comment)} があるからです。useEffectを使ってこうします。

jsx

1import { useEffect } from "react"; 2 3const Child = ({ setValue }) => { 4 const comment = "ok react."; 5 6 useEffect(() => { 7 setValue(comment); 8 }, [setValue]); 9 10 return <></>; 11} 12 13export default Child; 14

**FYI: **

レンダー中のいくつかの更新に関する警告
で言及されています。

投稿2021/11/15 13:57

編集2021/11/15 15:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsuo_basho

2021/11/15 16:53

ありがとうございます!! 勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問