javascript - React JS onChange 事件没有被触发

标签 javascript jquery reactjs

我正在实现 Freecodecamp 的 Markdown 预览器,但我遇到了一些问题。输入组件上的 onChange 事件没有被触发,我不明白为什么!

有什么想法吗?

class MarkDownPreviewer extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      inputText: this.props.text
    };
    
    this.handleChange = this.handleChange.bind(this);
  }
  
   
  handleChange(event) {
    alert("a");
    this.setState({inputText: event.target.value});
  }
  
  render() {
    return (
      <div id="wrapper">
        <MarkDownInput text={this.state.inputText} onChange={this.handleChange}/>
        <MarkDownOutput output={this.state.inputText}/>
      </div>
    );
  }
}

class MarkDownInput extends React.Component {
  render() {
    return (
      <textarea className="input">{this.props.text}</textarea>
    );
  }
}

class MarkDownOutput extends React.Component {
  parseMarkup(rawInput) {
    var rawMarkup = marked(rawInput, {gfm: true, sanitize: true});
    return {__html: rawMarkup};
  }
  
  render() {
    return (
      <div className="output" dangerouslySetInnerHTML={this.parseMarkup(this.props.output)}>
        
      </div>
    );
  }
}

var previewText = '# Heading\n\n ## Sub-heading\n \n### Another deeper heading\n \nParagraphs are separated\nby a blank line.\n\nLeave 2 spaces at the end of a line to do a  \nline break\n\nText attributes *italic*, **bold**, \n`monospace`, ~~strikethrough~~ .\n\nShopping list:\n\n  * apples\n  * oranges\n  * pears\n\nNumbered list:\n\n  1. apples\n  2. oranges\n  3. pears\n\nThe rain---not the reign---in\nSpain.\n\n *[Herman Fassett](https://freecodecamp.com/hermanfassett)*';

ReactDOM.render(
  <MarkDownPreviewer text={previewText} />, 
  document.getElementById('markpreview')
);
html, body {
  height: 100%;
}

#markpreview {
  height: 100%;
}

#wrapper {
  display:flex;
  height: 100%;
}

.input {
  width: 50%;
  background-color: #e3e3e3;
  margin-right: 10px;
  padding: 10px;
}

.output {
  width: 50%;
  background-color: #f3f3f3;
  white-space: pre;
  padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>


<div id="markpreview"></div>

最佳答案

您没有将 onChange 函数传递给 MarkDownInput 中的 textarea 组件,因此它永远不会被调用。

改变这个:

<textarea className="input">{this.props.text}</textarea>

对此:

<textarea className="input" onChange={this.props.onChange}>{this.props.text}</textarea>

关于javascript - React JS onChange 事件没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400873/

相关文章:

javascript - 我在 wordpress 中的 nivo slider 不显示箭头和导航栏

javascript - 如何使用 Node.js (tfjs-node) 从 Tensorflow.js 中的检查点重新启动模型训练?

javascript - jquery resize with click 函数在宽度改变时执行点击处理程序

javascript - 从 JavaScript 窗口打开时点击 MVC Controller 时如何传递附加参数但不在 url 中

javascript - 在 jQuery 中修改 CSS 变量/自定义属性

php - 来自 php 的 jQuery Ajax 响应变量

reactjs - Semantic UI React - 用远程内容填充下拉列表

javascript - 数组上的多个图像上传 - Javascript/Jquery

javascript - 扩展 react.component 和 '&' 符号

javascript - Excel SelectionChanged 事件未触发