javascript - 如何在两个反应兄弟组件之间传递数据?
问题描述
我有两个组件:它从输入字段中获取值。第二个组件是我获取 api 数据。问题是我想从 GetSearch 获取值作为我在 Pexels 中搜索 API 的值。
我曾多次尝试更改我的代码。我只是无法理解它应该如何完成,以及我应该如何与我的组件进行实际通信。
import React from "react";
class GetSearch extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
var PassValue = React.CreateClass({
render: function() {
return (
<p>{this.state.value}</p>
);
},
});
return (
<form className="search-form">
<input
type="text"
placeholder="Search for images"
value={this.state.value}
onChange={this.handleChange}/>
<input type="submit"/>
</form>
);
}
}
export default GetSearch
import React, { Component } from 'react'
export default class Pexels extends Component {
componentDidMount(){
let query = "water"
const url = `https://api.pexels.com/v1/search?query=${query}e+query&per_page=15&page=1`
const api_key = "xxxxxxxxxxxx"
fetch(url, {
method: 'GET',
headers: new Headers({
'Authorization': api_key
})
})
.then(response => response.json())
.then(data => {
console.log(data)
})
.catch(error => console.error(error))
}
render() {
return (
<h1>Hello</h1>)
}
}
如您现在所见:Pexels 发送一个值为 water 的 get 请求:let query = "water",效果很好。但我需要 GetSearch 组件中 this.state.value 的值
解决方案
首先,您需要创建一个父类。然后您需要将回调函数作为道具传递给孩子。这里的 GetSearch 组件可以是您的子类。单击搜索按钮后,您的主类方法将通知该更改。然后根据需要创建逻辑。遵循此示例代码。谢谢
父组件
var ParentComponent = React.createClass({
update: function() {
console.log("updated!");
},
render: function() {
<ChildComponent callBack={this.update} />
}
})
子组件
var ChildComponent = React.createClass({
preupdate: function() {
console.log("pre update done!");
},
render: function() {
<button onClick={this.props.callback}>click to update parent</button>
}
})
推荐阅读
- database - 尝试从 Web 应用程序访问时出现 REST API CORS 错误
- google-drive-api - 删除谷歌驱动器api中的权限
- android - Android Volley:我如何从服务器获得响应,无论它可能是什么?
- java - 如何在 Spring Boot linux 中向类路径提供外部配置资源(数据库属性和 XML 文件)
- sql - 查询以过滤值等于 @param 的位置,除非 @param 是其他
- c - 在 for 循环中使用 do-while 循环是否正确?为什么和为什么不?
- azure - 复制文件上传过程 - Asp.net WebApi
- javascript - 可以用 Next.js 完全替代 React-Router 吗?
- java - Java如何使用for循环填充年月列表?
- javascript - 我无法得到错误响应 node.js 以角度返回