无状态组件中的功能不起作用

时间:2020-05-28 17:36:52

标签: reactjs react-hooks

在我的以下代码中,它给出了错误:CreateParticipant.jsx:9未捕获的ReferenceError:handleInputChangeName未定义

我不明白是什么问题。我已经定义了函数,然后它也给出了这样的错误。

有人可以帮助我找出问题所在吗?

import React, { useState, useEffect } from 'react';
import { Redirect } from 'react-router-dom';

const CreateParticipant = () => {

  const [name, setname] = useState([])
  const [email, setemail] = useState([])

  handleInputChange = (event) => {
    if(event.target.name === "name"){
      setname(event.target.value)
    }
    else if(event.target.name === "email"){
      setemail(event.target.value)
    }
  }

  async function createPostRequest(event) {
    // console.log('this.state', this.state);
    const statepost = { name, email }
    await fetch('/api/v1/participants', {
      method: 'post',
      body: JSON.stringify(statepost),
      headers: { 'Content-Type': 'application/json' },
    }).then((response) => {
      alert('Post created successfully');
      location.href = '/';
    });
  }

  useEffect(() => {
    createPostRequest()
  }, []);

  return (
    <div>
      <h3>New Post</h3>
      <div>
        <label>name: </label>
        <input
          type='text'
          name='name'
          value={name}
          onChange={this.handleInputChange}
        />
      </div>
      <div>
        <label>email: </label>
        <input
          type='text'
          name='email'
          value={email}
          onChange={this.handleInputChange}
        />
      </div>
      {/* <div>
          <label>created_at: </label>
          <input
            type='text'
            name='created_at'
            value={created_at}
            onChange={this.handleInputChange}
            />
        </div> */}
      <button onClick={this.createPostRequest}>Create</button>
    </div>
  );
}

export default CreateParticipant;

2 个答案:

答案 0 :(得分:3)

与在functionName = () => {}有效的类组件中不同,函数组件就是那个-函数。您需要varletconst

const handleInputChangeName = (event) => {
  if(event.target.name === "name"){
    setname(event.target.value)
  }
  else if(event.target.name === "email"){
    setemail(event.target.value)
  }
}

此外,由于功能属于同一功能的范围,因此不需要this.,例如:

onChange={handleInputChange}
// ...
onClick={createPostRequest}

答案 1 :(得分:2)

模块始终在禁止隐式全局变量的strict mode中运行。

您需要明确声明变量(使用const(或letvar)。

const handleInputChangeName = (event) => {