javascript - 使用 React 在客户端组件中发布和更新计数

标签 javascript reactjs function

似乎无法让此 onClick 按钮正常工作并更新“给予的荣誉”数量。基本上是 3 个 .js 文件,同时使用 this API去测试。我的代码是:

app.js:

import React, { Component } from 'react';
import './App.css';

import KudoList from "./components/KudoList";

import axios from "axios";

class App extends Component {

  state = {
    contacts: []
  };

  componentDidMount() {
    axios
      .get("https://kudos-devtech8-yvbvpoek.herokuapp.com/users")
      .then(response => {
        const newContacts = response.data.map(c => {
          return {
            id: c.id,
            name: c.username,
            fname: c.first_name,
            lname: c.last_name,
            kgive: c.kudos_given_count,
            kreceived: c.kudos_received_count
          };
        });

        const newState = Object.assign({}, this.state, {
          contacts: newContacts
        });

        this.setState(newState);
      })
      .catch(error => console.log(error));
  }
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1 className="App-title">Welcome to our Kudo app</h1>
        </header>
        <KudoList contacts={this.state.contacts} />
      </div>
    );
  }
}

export default App;

Contact.js:

import React from "react";
import "./Contact.css";

class Contact extends React.Component {
    state = { kgive: 0,
              fname: '',
              lname: '',
              kreceived: ''
    };

    constructor(props) {
      super(props);

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

    incrementKudoCount(ev) {
      this.setState((prevState) => ({
        kgive: prevState.kgive+ 1,
      }));
    }

    render() {
      return (
        <div className="appPerson">
          <p>Name: {this.props.fname} {this.props.lname} <button onClick={() => this.incrementKudoCount()}>Give Kudo!</button></p>
          <p>Kudos Given: {this.props.kgive}</p>
          <p>Kudos Received: {this.props.kreceived}</p>
        </div>
      );
    }
  }

export default Contact;

然后是 KudoList.js:

import React from "react";
import Contact from "./Contact";

function KudoList(props) {
  return (
    <div>
        {props.contacts.map(c => <Contact key={c.id} name={c.name} fname={c.fname} lname={c.lname} kgive={c.kgive} kreceived={c.kreceived} /> )}
    </div>
  );
}

export default KudoList;

我没有收到任何错误,但按钮绑定(bind)事件无法正常工作,并且不确定原因。我应该有一个单独的组件来提供 kudo 还是不能像我一样简单地进行一些修改?

最佳答案

事件监听器应该是一个函数。我看到您正在返回(调用)该函数。 只需 onClick={this. incrementKudoCount} 应该可以工作。

**更新:一个工作沙箱**(因为 stackoverflow 沙箱不支持导入) https://codesandbox.io/embed/j2w729p329

关于javascript - 使用 React 在客户端组件中发布和更新计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52268668/

相关文章:

php - 在子主题中文件 wc-template-functions.php

javascript - 如何在数组中添加数字,并在向数组添加更多数字时重新计算并添加数字?

javascript - 在 vs 代码中将 emmet 与 react 应用程序一起使用不起作用

javascript - "Stateless function components cannot be given refs"是什么意思?

javascript - 从 State React.JS 渲染随机项

javascript - React Native - 如何将组件用作 JavaScript 对象?

javascript - 检索隐藏元素的 innerText

css - NextJS 生产 CSS 构建

javascript - Jquery/Javascript - 向我的小函数添加回调,仅在我选择时应用该特定回调

c++ - 为什么 std::function 的初始化器必须是 CopyConstructible?