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

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

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

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

JavaScript

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

React.js

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

Q&A

解決済

1回答

225閲覧

React.js 子->親のデータの渡し方について

kazoogon

総合スコア281

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2018/08/15 23:57

編集2018/08/16 02:38

実現したいこと

(React.js)
登録機能にてemailとpasswordを打ち込む画面。
PropTypesを追加し、validation機能追加したい

困っていること

親コンポネントにどうデータを渡したらよいか不明

コード

(思っていることなどはコード内に記載いたしました。)
親コンポネント

class RegisterContainer extends Component { constructor(props) { super(props); } render() { if (!this.props.registerOutcome) {//子componentから送られてくる値registerOutcomeで判断?? (子→親のデータ受け渡しはしない方がよいので、私の勘違いか??) return ( <div className="register"> <Navigation /> <h2> Register new account</h2> <RegisterForm /> </div> ); } if (this.props.registerOutcome.error){ return ( <div className="register"> <Navigation /> <h2> Register new account</h2> <h3>Registration failed: {this.props.registerOutcome.errorType}</h3> <RegisterForm /> </div> ); } } } function mapStateToProps(state) { return { registerOutcome: state.registerOutcome }; } export default connect(mapStateToProps)(RegisterContainer);

子cpomponent

class RegisterForm extends Component { constructor(props) { super(props); this.state = { email: '', password: '', }; this.handleEmailChange = this.handleEmailChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleEmailChange(event) { this.setState({ email: event.target.value }); } handlePasswordChange(event) { this.setState({ password: event.target.value }); } handleSubmit(event) { event.preventDefault(); this.props.registerUser(this.state.email, this.state.password); this.setState({ email: '', password: '' }); } render() { return ( <div className="list-input col-sm-6 float-sm-right"> <h2 className="alert alert-info text-center">Register</h2> <form className="form-group" onSubmit={this.handleSubmit}> <input className="form-control form-control-lg border-info text-info" type="text" name="email" value={this.state.email} onChange={this.handleEmailChange} /> <input className="form-control form-control-lg border-info text-info" type="password" name="password" value={this.state.password} onChange={this.handlePasswordChange} /> <input type="submit" value="Submit" /> </form> </div> ); } } //ここでチェックするが、registerOutcomeとして親にどうデータを渡せばよいのか?? RegisterForm.propTypes = { email: PropTypes.string.isRequired password: PropTypes.string.isRequired }; function mapDispatchToProps(dispatchRegisterUser) { return bindActionCreators({ registerUser }, dispatchRegisterUser); } export default connect(null, mapDispatchToProps)(RegisterForm);

store?と思われるファイルのいちぶ

const logger = store => next => (action) => { console.log('Redux logger:'); console.group(action.type); console.info('Dispatching', action); let result = next(action); console.log('Next state', store.getState()); console.groupEnd(action.type); return result; };

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

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

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

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

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

guest

回答1

0

ベストアンサー

Reduxを利用しているようなので、ReduxのStoreを介してやりとりすれば良いですね。

投稿2018/08/16 00:43

Meganezaru

総合スコア715

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

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

kazoogon

2018/08/16 02:28

なるほど、勉強になりました。  またpropsTypeの書く場所は子componentのあの場所・あの書き方でロジックは間違っていないのでしょうか??
kazoogon

2018/08/16 02:40

またstoreファイルはjsonでデータがまとめられてると思っていましたが、予想と違う内容でしたので本文に追記しときました。 これがstoreなのでしょうか??
Meganezaru

2018/08/16 03:20

元のソースがあり、それを再利用しようとしている、感じですかね? Reduxが理解できていないとすると、適切な回答が難しいかも・・・です(>_<) 一度、Reduxの仕組みについて、ご確認されるとよいかもしれません。
kazoogon

2018/08/16 06:52

そうですね、元のソースがありますね。   reduxの流れはわかり、view・action・reducerまでのファイルは理解できるのですが、storeのファイルだけつまずいている状態ですね。。。汗
Meganezaru

2018/08/16 07:29

Storeは、ファイルが存在するわけではなく、実質は、reducerで更新されるstate群のことですよ。
kazoogon

2018/08/19 09:47

なるほど、助かりました :)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問