ReactJS-无法读取未定义的属性“ preventDefault”

时间:2018-06-23 20:55:58

标签: javascript reactjs function onclick preventdefault

试图在ReactJS中做一个简单的onClick事件/函数。

单击按钮时,我想运行一个名为“ onClick”的函数,但是在控制台中出现此错误:

app.js:62 Uncaught TypeError: Cannot read property 'preventDefault' of undefined

用谷歌搜索,但不确定我要怎么做。我看过ReactJs文档,这看起来是正确的,但显然不正确。这是我的代码:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter} from 'react-router-dom';
import axios from 'axios';

import Navbar from './components/Navbar';
import Header from './components/Header';
import GiphyButton from './components/GiphyButton';
import './assets/sass/main.scss';

class App extends React.Component {

  constructor() {
    super();

    this.state = {
      giphy: []
    };

    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(e) {
    e.preventDefault();

    console.log('giffy button clicked');
    axios.get('http://api.giphy.com/v1/gifs/search?q=otters&api_key=<API KEY>')

      .then(res => {
        this.setState({ giphy: res.data });
        console.log(res.data);
      });
  }

  render() {
    return (
      <BrowserRouter>
        <main>
          <Navbar />
          <Header />
          <GiphyButton onClick={this.handleClick()}/>
        </main>
      </BrowserRouter>
    );
  }
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

GiphyButton是一个组件,从字面上看,它只是JSX。没有其他功能在这里运行:

从'react'导入React;

const GiphyButton = () => (

  <section>
    <button>See more otters</button>
  </section>
);

export default GiphyButton;

谢谢。

4 个答案:

答案 0 :(得分:2)

您应该只传递函数-handleClick而不要调用它

render() {
    return (
      <BrowserRouter>
        <main>
          <Navbar />
          <Header />
          <GiphyButton handleClick={this.handleClick}/>
        </main>
      </BrowserRouter>
    );
  }

这阻止了传递事件对象而导致undefined错误。

通过以下方法更改GiphyButton的代码以传递onclick方法-

import React from 'react';

const GiphyButton = (props) => (

  <section>
    <button onClick={props.handleClick}>See more otters</button>
  </section>
);

export default GiphyButton;

答案 1 :(得分:2)

不是我的问题的答案,但是我最终将函数更改为handleSubmit,并将其传递到我的按钮所在的表单中。

答案 2 :(得分:2)

您应该将此事件绑定到“ handleClick()”函数。如下,

<GiphyButton onClick={this.handleClick.bind(this)}/>

答案 3 :(得分:0)

Vivek的解决方案是正确的。似乎无法运行的原因可能是您缺少错误处理。检查网址(api键可能有问题吗?),然后尝试捕获axios错误。在这里看看:

code example