だから私はコンポーネントをクラス化する必要があります:
Class1:クリックボタンがあります
Class2:私のAPIを呼び出すメソッドがあります
基本的に、あるクラス内の状態を別のクラスから設定および編集するメソッドを呼び出すことです。しかし、私は失敗し続けます。
Class1.js
export class Class1 extends Component {
render() {
return (
<div onClick={must call Class2Method}></div>
)
}
}
Class2.js
export class Class2 extends Component {
Class2Method(){
Here I call my API, I set & call states, ...
}
render {
return (
<Class1 />
Here I return my API content
)
}
}
どうぞ
Class1.js
export class Class1 extends Component {
render() {
return (
<div onClick={this.props.callApi}></div>
)
}
}
Class2.js
CallApiメソッドをプロップとしてclass1コンポーネントに渡し、this.props.callApiとして上記のコンポーネントにアクセスして、divのonClickに渡します。
export class Class2 extends Component {
callApi = () => {
Here I call my API, I set & call states, ...
}
render {
return (
<Class1 callApi={this.callApi} />
Here I return my API content
)
}
}
まず、 "Class1"のように状態を使用せず、小道具のみを使用する場合は、ステートフルコンポーネントの代わりに Stateless Functional Components を使用することを検討してください。
さて、あなたが必要なことをするために..このように、あなたのメソッドを小道具として渡すだけです:
export class Class1 extends Component {
render() {
return (
<div onClick={this.props.getData()}>Click to Call API</div>
);
}
}
export class Class2 extends Component {
state = {
data: null,
};
callApi = () => {
// Get API data
const data = {
hello: 'world',
};
this.setState({ data });
}
render {
return (
<Class1 getData={this.callApi} />
{JSON.stringify(this.state.data)}
)
}
}
React.jsで別のクラスコンポーネントからメソッドを呼び出す方法
小道具の使用
「レンダープロップ」とは、React値が関数であるプロップを使用するコンポーネント)間でコードを共有するための手法のことです- reactjs.org
例
app.js
import Button from '../../pathtoButton';
export class App extents Component {
constructor(props){
super(props)
this.state = {
name:'John'
}
}
sayHello(){
const { name } = this.message;
alert(`Hello ${name}`}
}
render(){
return (
<div>
<Button
value="click me"
whenClicked={this.sayHello}
</div>
);
}
}
button.js
export class Button extents Component {
constructor(props){
super(props)
this.state = {
style:{background:'red', color:'white'},
}
}
render(){
const { style } = this.state;
const { whenClicked, value} = this.props;
return (
<div>
<button style={style} onClick={whenClicked}>{value}</button>
</div>
);
}
}
説明
app.js
では、コンポーネント<Button/>
をインポートし、props
を使用して、app.js
"sayHello
"からwhenClicked
。 button.js
では、this.props.whenClicked
を参照してonClick
プロパティに渡しました。
sayHello
は2つのコンポーネント間で共有されています。これは、メソッドをプロップとして<Button/>
コンポーネントに渡したためです。