Reactjs 我的反应问题快把我逼疯了
我已经测试了api,它可以正常工作,并显示了我希望它如何工作,但问题是,当我尝试添加一些像搜索栏这样简单的东西时,我发现我正在挣扎。我正在努力学习react,并一直很享受它,希望有人能指出他们可能看到的任何错误以及我遇到的问题。每当我输入并提交到搜索栏时,console.log(poke)就会返回两个包含大量信息的对象,其中没有一个是文本框中的值。如果您有任何想法,以及任何指导或提示,我们将不胜感激Reactjs 我的反应问题快把我逼疯了,reactjs,Reactjs,我已经测试了api,它可以正常工作,并显示了我希望它如何工作,但问题是,当我尝试添加一些像搜索栏这样简单的东西时,我发现我正在挣扎。我正在努力学习react,并一直很享受它,希望有人能指出他们可能看到的任何错误以及我遇到的问题。每当我输入并提交到搜索栏时,console.log(poke)就会返回两个包含大量信息的对象,其中没有一个是文本框中的值。如果您有任何想法,以及任何指导或提示,我们将不胜感激 class Card extends React.Component { construc
class Card extends React.Component {
constructor() {
super();
this.state = {
loading: true,
pokemon: null,
inputBox: "",
}
this.componentDidMount = this.componentDidMount.bind(this);
this.handleChange = this.handleChange.bind(this);
}
handleChange({ target }) {
console.log({target})
this.setState({
[target.name]: target.value
});
}
async componentDidMount(poke)
{
console.log(poke);
const url = `https://pokeapi.co/api/v2/pokemon/${poke}`;
const response = await fetch(url);
const data = await response.json();
this.setState( {pokemon : data, loading : false} )
}
render() {
return (
<article className="pokemonStats"
style={{
position: 'absolute', left: '50%', top: '50%',
transform: 'translate(-50%, -50%)'
}}>
{this.state.loading || !this.state.pokemon ?(
<>
<input name="input"
id="first_name"
type="textbox"
name="inputBox"
placeholder="Enter pokemon here..."
value={ this.state.inputBox }
onChange={ this.handleChange }/>
<button value="send" onClick={this.componentDidMount}>Search</button>
类卡扩展React.Component{
构造函数(){
超级();
此.state={
加载:对,
口袋妖怪:空,
输入框:“”,
}
this.componentDidMount=this.componentDidMount.bind(this);
this.handleChange=this.handleChange.bind(this);
}
handleChange({target}){
console.log({target})
这是我的国家({
[target.name]:target.value
});
}
异步组件安装(poke)
{
控制台。日志(戳);
常量url=`https://pokeapi.co/api/v2/pokemon/${poke}`;
const response=等待获取(url);
const data=wait response.json();
this.setState({pokemon:data,loading:false})
}
render(){
返回(
{this.state.loading | | |!this.state.pokemon?(
搜寻
componentDidMount是。如果您是新手,请尝试使用功能组件。挂钩更易于理解和使用。您生成的URL也错误。您正在URL字符串中传递click事件,而URL字符串必须使用inputBox状态计算。
从“React”导入React;
导入“/styles.css”;
导出默认函数App(){
返回(
);
}
类卡扩展了React.Component{
构造函数(){
超级();
此.state={
加载:对,
口袋妖怪:空,
输入框:“
};
this.getPokemon=this.getPokemon.bind(this);
this.handleChange=this.handleChange.bind(this);
}
handleChange({target}){
这是我的国家({
[target.name]:target.value
});
}
异步getPokemon(e){
试一试{
console.log(this.state.inputBox);
常量url=`https://pokeapi.co/api/v2/pokemon/${this.state.inputBox}`;
const response=等待获取(url);
const data=wait response.json();
控制台日志(数据);
this.setState({pokemon:data});
}捕捉(错误){
控制台日志(err);
}最后{
this.setState({loading:false});
}
}
render(){
返回(
{this.state.pokemon&&(
{JSON.stringify(this.state.pokemon,null,4)}
)}
搜寻
);
}
}
componentDidMount是。如果您是新手,请尝试使用功能组件。挂钩更易于理解和使用。您生成的URL也错误。您正在URL字符串中传递click事件,而URL字符串必须使用inputBox状态计算。
从“React”导入React;
导入“/styles.css”;
导出默认函数App(){
返回(
);
}
类卡扩展了React.Component{
构造函数(){
超级();
此.state={
加载:对,
口袋妖怪:空,
输入框:“
};
this.getPokemon=this.getPokemon.bind(this);
this.handleChange=this.handleChange.bind(this);
}
handleChange({target}){
这是我的国家({
[target.name]:target.value
});
}
异步getPokemon(e){
试一试{
console.log(this.state.inputBox);
常量url=`https://pokeapi.co/api/v2/pokemon/${this.state.inputBox}`;
const response=等待获取(url);
const data=wait response.json();
控制台日志(数据);
this.setState({pokemon:data});
}捕捉(错误){
控制台日志(err);
}最后{
this.setState({loading:false});
}
}
render(){
返回(
{this.state.pokemon&&(
{JSON.stringify(this.state.pokemon,null,4)}
)}
搜寻
);
}
}
componentDidMount
是一种生命周期方法,在第一次装载后自动运行。因此您不能调用this.compnentDidMount
async setData()
{
const poke = this.state.inputBox
const url = `https://pokeapi.co/api/v2/pokemon/${poke}`;
const response = await fetch(url);
const data = await response.json();
this.setState( {pokemon : data, loading : false} )
}
<button value="send" onClick={this.setData}>Search</button>
async setData()
{
const poke=this.state.inputBox
常量url=`https://pokeapi.co/api/v2/pokemon/${poke}`;
const response=等待获取(url);
const data=wait response.json();
this.setState({pokemon:data,loading:false})
}
搜寻
componentDidMount
是一种生命周期方法,在第一次装载后自动运行。因此您不能调用this.compnentDidMount
async setData()
{
const poke = this.state.inputBox
const url = `https://pokeapi.co/api/v2/pokemon/${poke}`;
const response = await fetch(url);
const data = await response.json();
this.setState( {pokemon : data, loading : false} )
}
<button value="send" onClick={this.setData}>Search</button>
async setData()
{
const poke=this.state.inputBox
常量url=`https://pokeapi.co/api/v2/pokemon/${poke}`;
const response=等待获取(url);
const data=wait response.json();
this.setState({pokemon:data,loading:false})
}
搜寻
您不应该调用this.componentDidMount
这样的生命周期方法。添加一个在onClick
和componentDidMount
上都被调用的函数,您不应该调用this.componentDidMount
这样的生命周期方法。添加一个在onClick
和上都被调用的函数在componentDidMount
上,非常感谢您的帮助。我现在将研究hooks以更好地了解您非常感谢@gautaitsI更新了我的代码@AlexanderKeen.working[sandbox[()非常感谢这真的很有帮助。我现在将研究钩子,以便更好地理解。非常感谢@gautaitsI更新了我的代码@AlexanderKeen.working[sandbox[()非常感谢您的解决方案,我非常感谢您花了这么多时间来帮助解决我的问题。@Jagrati可能应该指出,componentDidMount
不再是异步函数