危险的setlynerHtml在某些条件下无效

Bha*_*gav 5 javascript reactjs

dangerouslySetInnerHtml用来将链接插入复合反应组件.该render方法调用一个方法rowValue,该方法检查组件的状态并返回要呈现的相应标记.

这是rowValue方法:

rowValue: function() {
    var fieldValue;

    if(!this.state.isBeingEdited) {
        fieldValue = (
            <div dangerouslySetInnerHtml={{ __html: this.props.value }} />
        );
    } else {
        fieldValue = (
            <div className="col-sm-6 col-xs-6 js-field-wrapper">
                <input type="text"
                       defaultValue={this.extractUrl(this.props.value)}
                       className="form-control" />
            </div>
        );
    }

    return fieldValue;
},
Run Code Online (Sandbox Code Playgroud)

在初始渲染时,div的内容为空:

<div class="col-sm-6 col-xs-6" data-reactid=".1.1.0.0.0.1.0.0.2.1:$angellist.0.1"></div>
Run Code Online (Sandbox Code Playgroud)

但是当edit组件的状态设置为true输入时,正确填充了正确的值:

<div class="col-sm-6 col-xs-6 js-field-wrapper" data-reactid=".1.1.0.0.0.1.0.0.2.1:$angellist.0.1">
    <input type="text" class="form-control" value="https://example.com" data-reactid=".1.1.0.0.0.1.0.0.2.1:$angellist.0.1.0">
</div>
Run Code Online (Sandbox Code Playgroud)

edit状态设置为false会呈现空div.

包裹divdangerouslySetInnerHtml内的另一个支柱div不会改变任何东西.

Bha*_*gav 2

我无法弄清楚为什么会发生这种情况的确切条件,但我找到了解决方法。为了后代的缘故,这里是:

我想用特定的链接填充 div。我没有传递带有要设置的锚标记的字符串,dangerouslySetInnerHtml而是传递了 URL 并设置了href锚标记的属性。

  fieldValue = (
      <div className="col-sm-6 col-xs-6">
         <a href="{this.props.url}">{this.props.url}</a>
      </div>
    );
Run Code Online (Sandbox Code Playgroud)