gpt4 book ai didi

javascript - react 将获取的数据传递给另一个组件

转载 作者:行者123 更新时间:2023-11-30 20:02:24 24 4
gpt4 key购买 nike

嗨!

我的 react 代码有问题。我的任务是从 iTunes API 调用,我使用 fetch 然后处理数据。但我无法将其保存为变量以便以后传递。

import React, { Component } from 'react';

class SearchField extends 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) => {
event.preventDefault();
fetch(`https://itunes.apple.com/search?media=music&term=${this.state.value.toLowerCase()}`)
.then((resp) => resp.json())
.then(searchRes => searchRes.results[0].artistName)
.catch(err => console.log(err));
}

render() {
return(
<section className="hero is-primary">
<div className="hero-body">
<div className="container">
<form onSubmit={this.handleSubmit}>
<input className="input is-primary" type="text" value={this.state.value} onChange={this.handleChange} placeholder="Search for artist" />
<input className="button is-info" type="submit" value="Search" />
</form>
</div>
</div>
</section>
)
}
}
export default SearchField;

稍后我必须使用获取的数据,我只需要先提供艺术家姓名。如果我记录值 (searchRes.results[0].artistName,我得到正确的值,但如果我想保存它供以后使用,我只会得到空的 console.log。我尝试了几种方法,但我从未得到结果。

请帮帮我。

最佳答案

请记住,React 中的数据流是单向。如果你想在你的应用程序周围共享数据,搜索组件不应该是获取数据的组件。这应该留给父组件(可能是应用程序)。该组件应该有一个处理获取请求的函数,然后您可以将该函数的引用传递给搜索组件,以便在单击按钮时调用。然后,一旦加载了该数据,父 (App) 组件就可以将所有相关数据传递给子组件。

这是一个基于您现有代码的快速模型:

class Search extends {

constructor(props) {
super(props);
this.state = { url: '' };
this.handleKey = this.handleKey.bind(this);
}

handleKey(e) {
const url = e.target.value;
this.setState({ url });
}

render() {
const { url } = this.state;

// grab the function passed down from App
const { fetchData } = this.props;
return (
<input onKeyUp={this.handleKey} value={url} />

// Call that function with the url when the button is clicked
<button onClick={() => fetchData(url)}>Click</button>
)
}
}


class App extends Component {

constructor(props) {
super(props);
this.state = { data: [] };
this.fetchData = this.fetchData.bind(this);
}

// App contains the fetch method
fetchData(url) {
fetch(url)
.then(res => res.json())

// Update the App state with the new data
.then(data => this.setState({ data });
}

render() {
const { data } = this.state;

// Sanity check - if the state is still empty of data, present
// a loading icon or something
if (!data.length) return <Spinner />

// otherwise return the rest of the app components
// passing in the fetch method as a prop for the search component
return (
<OtherComponent data={data} />
<Search fetchData={this.fetchData} />
)
}
}

关于javascript - react 将获取的数据传递给另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53239925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com