Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 文本区域内的HTML-表情符号标记_Reactjs_Emoji - Fatal编程技术网

Reactjs 文本区域内的HTML-表情符号标记

Reactjs 文本区域内的HTML-表情符号标记,reactjs,emoji,Reactjs,Emoji,我试图在文本区域内呈现表情符号,我在这一点上被难住了 我看不出如何在文本区域内的值上使用危险的LysetinerHTML,所以当你添加表情时,你会看到它们在预览中呈现 提前谢谢 使用表情标记库 <script src="//cdn.jsdelivr.net/emojione/1.5.0/lib/js/emojione.min.js"></script> <link rel="stylesheet" href="//cdn.jsdelivr.net/emojione

我试图在文本区域内呈现表情符号,我在这一点上被难住了

我看不出如何在文本区域内的值上使用危险的LysetinerHTML,所以当你添加表情时,你会看到它们在预览中呈现

提前谢谢

使用表情标记库

<script src="//cdn.jsdelivr.net/emojione/1.5.0/lib/js/emojione.min.js"></script>
<link rel="stylesheet" href="//cdn.jsdelivr.net/emojione/1.5.0/assets/css/emojione.min.css" />

代码:

var Emoji=React.createClass({
rawMarkup:function(){
var rawMarkup=emojione.shortnametimage(this.props.emojcode.toString(),{sanitize:true});
返回{uuuhtml:rawMarkup};
},
handleClick:函数(id){
this.props.handleClick(id);
},
render:function(){
返回(
);
}
});
var App=React.createClass({
getInitialState:函数(){
返回{
数据:[':咧嘴笑:',':高兴:',':微笑:',':大笑:'],
文本:“”
};
},
_onChange:函数(事件、值){
这是我的国家({
文本:event.target.value
});
},
把手舔(项目){
这是我的国家({
text:this.state.text+=项
});
},
rawMarkup:function(){
var rawMarkup=emojione.shortnametimage(this.state.text.toString(),{sanitize:true});
返回{uuuhtml:rawMarkup};
},
render:function(){
var_this=这个;
var data=this.state.data.map(函数(项){
返回(
);
});
返回(
{data}
);
}
});
ReactDOM.render(
,
document.getElementById('容器')
);

您必须使用内容可编辑分区


我认为不能将纯文本与html混合在一起,并在文本区域中查看。你必须把这一切看作是危险的。
var Emoji = React.createClass({
  rawMarkup: function() {
    var rawMarkup = emojione.shortnameToImage(this.props.emojcode.toString(), {sanitize: true});
    return { __html: rawMarkup };
  },

  handleClick: function(id) {
    this.props.handleClick(id);
  },


  render: function() {
    return (
      <div id="emojText">
        <button onClick={this.handleClick.bind(this, this.props.emojcode)}><span dangerouslySetInnerHTML={this.rawMarkup()} /></button>
      </div>
    );
  }
});

var App = React.createClass({

  getInitialState: function() {
    return {
      data: [':grinning:', ':joy:', ':smiley:', ':laughing:' ],
      text: ''
    };
  },

  _onChange: function(event, value) {
    this.setState({
      text: event.target.value
    });
  },

  handleClick(item) {
    this.setState({
      text: this.state.text +=item
    });
  },

  rawMarkup: function() {
    var rawMarkup = emojione.shortnameToImage(this.state.text.toString(), {sanitize: true});
    return { __html: rawMarkup };
  },



  render: function() {
    var _this = this;
    var data = this.state.data.map(function(item){
      return (
        <Emoji emojcode={item} handleClick={_this.handleClick}/>
      );
    });

    return (
      <div className="container">
        <span dangerouslySetInnerHTML={this.rawMarkup()} />
        {data}
        <div className="clearfix"></div>
        <textarea
          className="message-composer"
          name="message"
          value={this.state.text}
          onChange={this._onChange.bind(this)}
          />
      </div>
    );
  }
});

ReactDOM.render(
  <App name="World" />,
  document.getElementById('container')
);