Reactjs 我的反应问题快把我逼疯了

Reactjs 我的反应问题快把我逼疯了,reactjs,Reactjs,我已经测试了api,它可以正常工作,并显示了我希望它如何工作,但问题是,当我尝试添加一些像搜索栏这样简单的东西时,我发现我正在挣扎。我正在努力学习react,并一直很享受它,希望有人能指出他们可能看到的任何错误以及我遇到的问题。每当我输入并提交到搜索栏时,console.log(poke)就会返回两个包含大量信息的对象,其中没有一个是文本框中的值。如果您有任何想法,以及任何指导或提示,我们将不胜感激 class Card extends React.Component { construc

我已经测试了api,它可以正常工作,并显示了我希望它如何工作,但问题是,当我尝试添加一些像搜索栏这样简单的东西时,我发现我正在挣扎。我正在努力学习react,并一直很享受它,希望有人能指出他们可能看到的任何错误以及我遇到的问题。每当我输入并提交到搜索栏时,console.log(poke)就会返回两个包含大量信息的对象,其中没有一个是文本框中的值。如果您有任何想法,以及任何指导或提示,我们将不胜感激

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
不再是异步函数