javascript - 输入字段在reactjs中不可编辑

标签 javascript reactjs

我正在构建一个 Markdown 预览器,我有一个文本区域,用户可以在其中键入内容并在键入时实时查看结果,但我正在努力,因为文本区域无法编辑。我正在使用 markedjs。

class Previewer extends Component {
constructor(props) {
    super(props);
    this.state = { value: 'Heading\n=======\n\nSub-heading\n-----------\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\nUnordered 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 *[David Dume](https://www.freecodecamp.com/dumed)*' };

    this.updateValue = this.updateValue.bind(this);
  }
  updateValue(val) {
    this.setState = { value: val };
  }
  markup(text) {
    var markup = marked(text, { sanitize: true });
    return { __html: markup}
  }
  render() {
    return (
      <div className='row'>
        <div className='col-md-6'>
          <Markdown value={this.state.value} updateValue={this.updateValue} />
        </div>
        <div className='col-md-6'>
          <span dangerouslySetInnerHTML={this.markup(this.state.value)} />
        </div>
      </div>
    );
  }
}

这里我定义了文本区域。

 class Markdown extends Component {
  constructor(props) {
    super(props);

    this.onChange = this.onChange.bind(this);
  }
  onChange(e) {
    var textarea = reactDOM.findDOMNode(this.refs.textarea);
    var val = textarea.value;
    this.props.updateValue(val);
  }
  render() {
    return (
      <div className={this.props.className}>
        <textarea rows='22' type='text' value={this.props.value} ref='textarea'  className='form-control' onChange={this.onChange} />
      </div>
    );
  }
}

最佳答案

问题是您没有正确更新状态。 setState 是一个函数而不是一个值,您需要调用该函数并传递一个包含您要更新的键的对象。

这样写:

updateValue(val) {
   this.setState({ value: val });
}

onChange(e) {
   var val = e.target.value;
   this.props.updateValue(val);
}

关于setState的详细检查 this answer .

有关工作示例,请参阅 jsfiddle:https://jsfiddle.net/g5e7akc6/

关于javascript - 输入字段在reactjs中不可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650512/

相关文章:

Javascript if 语句不起作用

javascript - 通过 JQuery ajax 提交带有键的数组

JavaScript:XMLHttpRequest 状态总是返回 0

javascript - 无法正确配置webpack 2.2.1,不断抛出WebpackOptionsValidationError

javascript - 将图像作为对象放入状态变量并将其作为 Prop 传递

javascript - 如何解决 react-router v6 Link 元素错误?

Javascript\x 在混合字符串中转义

javascript - 标签名称属性带有 + 和引号

reactjs - 在多个 .env 文件之间切换,例如 .env.development 和 react native

mysql - React with Rails - 在服务器日志中回滚