Reactでは、私は次のようなファイルを持っています
--parent.js
--child.js
--App.js
parent.jsにはテキストボックスとボタンが含まれています
child.jsにはPタグが含まれています
App.jsには親コンポーネントと子コンポーネントの両方が含まれています
問題
ボタンクリックで親からテキストボックスの値を子に渡し、子の段落タグに値を表示します。
完全なコードstackblitz
子コンポーネントにデータを渡すようにサンプルを更新しました。
https://stackblitz.com/edit/react-trmj9i?file=child.js
クイックリファレンス用に以下のコードを追加する
index.js
import React, { Component } from 'react';
import { render } from 'react-dom';
import Parent from './parent';
import Child from './child';
import './style.css';
class App extends Component {
constructor() {
super();
this.state = {
name: 'React',
parentTextBoxValue: ''
};
}
handleParentData = (e) => {
this.setState({parentTextBoxValue: e})
}
render() {
return (
<div>
<Parent handleData={this.handleParentData} />
<Child parentTextBoxValue={this.state.parentTextBoxValue}/>
</div>
);
}
}
render(<App />, document.getElementById('root'));
parent.js
import React, { Component } from 'react';
import Button from 'react-uikit-button';
class Parent extends Component {
constructor(props){
super(props);
this.state={TextBoxValue: ""}
}
SubmitValue = (e) => {
this.props.handleData(this.state.TextBoxValue)
}
onChange=(e)=>{
this.setState({TextBoxValue: e.target.value})
}
render() {
return (
<div className="">
<input type="text" name="TextBox" onChange={this.onChange}
/>
<Button onClick={this.SubmitValue}>Submit Value</Button>
</div>
);
}
}
export default Parent;
child.js
import React, { Component } from 'react';
class Child extends Component {
constructor(props){
super(props);
}
render() {
return (
<div className="App">
<p>{this.props.parentTextBoxValue}</p>
</div>
);
}
}
export default Child;
私がしたことを説明するために、App.jsから親に関数を渡しました。これは、状態を上げるのに役立ちます。テキストボックスの親コンポーネントの変更時および更新されたアプリの状態の送信時に処理されます。最後に、この状態を子コンポーネントに渡しました。
import React from "react";
class Parent extends React.Component(){
constructor(props){
super(props);
this.state={
name:"suraj"
}
}
render(){
return(
<div className = "parent">
<child data={this.state.name}/>
</div>
);
}
}
export default Parent;
export function Child(props){
return(
<div>{props.data}</div>
);
}
ボタンをクリックすると、テキストボックスの値を取得し、setState
関数を使用して親の状態に追加できます。
その後、親のrenderメソッドを呼び出す必要があります。なぜなら、状態が変わったからです。次に、状態で保持されている値を子要素の属性に配置できます。
<child message={value}>
その後、子供の小道具を介してそのメッセージにアクセスできます。
class child extends Component {
render(){
//use this.props.message to access message
}
}
そこから、あなたはその値であなたがやりたいことを何でもすることができます。
アプリコンポーネント内
import React, { Component } from 'react';
import Parent from './Parent';
class App extends Component {
state= {
data: '',
}
addFormValue = (data) => {
this.setState({
data,
});
}
render() {
return (
<div>
<Parent addFormValue={this.addFormValue} data={this.state.data}/>
</div>
)
}
}
export default App;
親コンポーネント内
import React, { Component } from 'react';
import Child from './Child';
class Parent extends Component {
constructor({props}) {
super(props);
}
textBoxRef = React.createRef();
getValue = (event) => {
event.preventDefault();
const textBoxValue = this.textBoxRef.value.value;
this.props.addFormValue(textBoxValue);
};
render() {
return (
<div>
<form>
<input type="text" name="name" placeholder="Name" ref={this.textBoxRef}/>
<button type="submit" onClick={this.getValue}>Submit</button>
</form>
<Child data={this.props.data} />
</div>
);
}
}
export default Parent;
子コンポーネント内
import React from 'react';
const Child = ({data}) => (
<p>{data}</p>
);
export default Child