首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正在获取此错误...invariant.js:42未捕获错误:应将`onClick`侦听器作为函数,但却获得了` `string` `类型的值

正在获取此错误...invariant.js:42未捕获错误:应将`onClick`侦听器作为函数,但却获得了` `string` `类型的值
EN

Stack Overflow用户
提问于 2018-06-29 03:55:53
回答 1查看 190关注 0票数 0

好的,我正在制作一个表单,允许用户构建测验(就像buzzfeed测验一样),但我不想限制用户必须回答的问题的数量。所以我想我可以做一些事情,在问题的底部有一个“添加问题”按钮,让用户添加一个包含所有适当字段的问题。现在我只是在表单部分工作,我已经有了逻辑设置,使测验功能和东西,但所有的测验细节(答案,问题等)。都是硬编码的。我对如何做这些事情(html,js,react,等等)也不是很了解。因此,如果还有什么看起来很时髦的,我愿意接受一些小贴士。不管怎样..。这是我的代码。

代码语言:javascript
复制
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

var questionNum = 1;

class App extends Component {
  render() {
    return (
      <div className="App">
        <div>
          <header className="App-header">
            <img src={logo} className="App-logo" alt="logo" />
            <h1 className="App-title">Welcome to React</h1>
          </header>
          <p className="App-intro">
            To get started, edit <code>src/App.js</code> and save to reload.
          </p>
        </div>
        <form>
          Give your quiz a title:<br />
          <input type="text" name="quizTitle" /><br />
          Who's the author?<br />
          <input type="text" name="author" /><br />
          Now let's add some questions...<br />
          <form className="quesitons">
            <div id={"questions" + questionNum}>
              Question {questionNum}<br />
              <input type="text" name={"question" + questionNum}/><br />
              Answers<br />
              Check the box(es) for the correct answer(s).<br />
              <input type="checkbox" name={"question" + questionNum + "Answer1Box"} />
              <label for={"question" + questionNum + "Answer1"}><input type="text" name={"question" + questionNum + "Answer1"}/></label><br />
              <input type="checkbox" name={"question" + questionNum + "Answer2Box"} />
              <label for={"question" + questionNum + "Answer2"}><input type="text" name={"question" + questionNum + "Answer2"}/></label><br />
              <input type="checkbox" name={"question" + questionNum + "Answer3Box"} />
              <label for={"question" + questionNum + "Answer3"}><input type="text" name={"question" + questionNum + "Answer3"}/></label><br />
              <input type="checkbox" name={"question" + questionNum + "Answer4Box"} />
              <label for={"question" + questionNum + "Answer4"}><input type="text" name={"question" + questionNum + "Answer4"}/></label><br />
            </div>
            <div id="container"></div>
          </form>
        </form>
        <button id="addQuestionButton" onClick='addQuestion ()'>Add Question</button>
      </div>
    );
  }
}

function addQuestion () {
  questionNum++;
  console.log(questionNum + "that is the question number");

  var div = document.createElement('div');

    div.className = '{"questions" + questionNum}';

    div.innerHTML =
        'Question {questionNum}<br />\
        <input type="text" name={"question" + questionNum}/><br />\
        Answers<br />\
        Check the box(es) for the correct answer(s).<br />\
        <input type="checkbox" name={"question" + questionNum + "Answer1Box"} />\
        <label for={"question" + questionNum + "Answer1"}><input type="text" name={"question" + questionNum + "Answer1"}/></label><br />\
        <input type="checkbox" name={"question" + questionNum + "Answer2Box"} />\
        <label for={"question" + questionNum + "Answer2"}><input type="text" name={"question" + questionNum + "Answer2"}/></label><br />\
        <input type="checkbox" name={"question" + questionNum + "Answer3Box"} />\
        <label for={"question" + questionNum + "Answer3"}><input type="text" name={"question" + questionNum + "Answer3"}/></label><br />\
        <input type="checkbox" name={"question" + questionNum + "Answer4Box"} />\
        <label for={"question" + questionNum + "Answer4"}><input type="text" name={"question" + questionNum + "Answer4"}/></label><br />\
        ';

    document.getElementsByClassName('questions').appendChild(div);
}

export default App;

(我知道在我的页面上有来自React的类似的东西,它不是我的,但我认为它现在很可爱,所以我将把它留在那里,直到我让这个表单工作)当我按下"addQuestion“按钮时,我得到了这个错误...

代码语言:javascript
复制
invariant.js:42 Uncaught Error: Expected `onClick` listener to be a function, instead got a value of `string` type.

这还不是全部错误(我会把它放在最后),但我不太确定如何修复这个错误。我也不太明白这是什么意思,所以如果有人能解释一下那就太好了。

这是完整的错误(哦,我在Google Chrome的dev工具中发现了这个错误,但你可能已经知道了)

代码语言:javascript
复制
Uncaught Error: Expected `onClick` listener to be a function, instead got a value of `string` type.
    at invariant (invariant.js:42)
    at getListener (react-dom.development.js:680)
    at listenerAtPhase (react-dom.development.js:981)
    at accumulateDirectionalDispatches (react-dom.development.js:1004)
    at traverseTwoPhase (react-dom.development.js:924)
    at accumulateTwoPhaseDispatchesSingle (react-dom.development.js:1020)
    at forEachAccumulated (react-dom.development.js:562)
    at accumulateTwoPhaseDispatches (react-dom.development.js:1063)
    at Object.extractEvents (react-dom.development.js:4396)
    at extractEvents (react-dom.development.js:697)
    at runExtractedEventsInBatch (react-dom.development.js:731)
    at handleTopLevel (react-dom.development.js:4476)
    at batchedUpdates$1 (react-dom.development.js:16659)
    at batchedUpdates (react-dom.development.js:2131)
    at dispatchEvent (react-dom.development.js:4555)
    at interactiveUpdates$1 (react-dom.development.js:16714)
    at interactiveUpdates (react-dom.development.js:2150)
    at dispatchInteractiveEvent (react-dom.development.js:4532)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 03:59:39

onClick='addQuestion ()'应为onClick={addQuestion}

原因是JSX,所以虽然它看起来像HTML,但它实际上不是HTML,所以有一些细微的区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51090391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档