如何在反应材料 ui 组件中调用方法
How to call a method inside a react material-ui components
我正在实现一个具有添加表情符号功能的聊天系统。 为此,我创建了一个函数,该函数返回一个组件以及文本和图像。
我使用的功能
test: function(item1) {
var texts = item1.message.split(/:')/g);
console.log(texts);
var content = [];
for(var i = 0; i < texts.length - 1; i++) {
content.push(texts[i]);
content.push(<img src={Emojis[0].uri}/>);
}
return content.map(function(emoji) {
return (<span> {emoji} </span>)
})
},
对于这次聊天,我使用的是Socketio和Node Express。 返回的消息显示在 React 组件上。 "线程"Jason 包含所有收到的消息(线程内的键是消息,User1)。 现在我想要的是在 secondaryText 中调用上述测试函数并将 {item.message} 作为参数传递。 但是当它运行时,它会说"未捕获的引用错误: 测试未定义"。
<div>
{
this.state.threads.map(function(item) {
return (<ListItem
leftAvatar={<Avatar src="profile pic" />}
primaryText={item.user1}
secondaryText={test({item})}
secondaryTextLines={2}
/>
);
})
}
</div>
整个反应组件
const Threads = React.createClass({
getInitialState: function() {
return {
threads: ThreadStore.getmessages()
}
},
userlistio:function(){
console.log(" awooooo");
socket.on('chatList',function(data){
console.log(data.Userlist+" awa!");
}.bind(this));
},
componentDidMount: function () {
ThreadStore.addChangeListener(this._onChange);
},
_onChange: function () {
this.setState({
threads: ThreadStore.getmessages()
});
},
socketio: function() {
socket.on('chat', function (data) {
console.log(data.message);
console.log(data.user2);
this.setState({threads: data.message});
}.bind(this));
},
_sendmessage: function() {
let message = this.refs.message2.value;
let User2 = this.refs.message1.value;
let Eml = LoginStore.getEmail();
let chat = {
message: message,
user1: User1,
user2: User2,
emailusr1: Eml
}
console.log('Emiting ...');
socket.emit('message', chat);
console.log('Done ...');
},
test: function(item1) {
var item = {
message: ':) hello :) hello :) hello :)'
}
console.log("smilies working");
var texts = item1.message.split(/:')/g);
console.log(texts);
var content = [];
for(var i = 0; i < texts.length - 1; i++) {
content.push(texts[i]);
content.push(<img src={Emojis[0].uri}/>);
}
return content.map(function(emoji) {
return (<span> {emoji} </span>)
})
},
render: function() {
return (
<Paper zDepth={1} style={Sty1}>
{this.userlistio()}
{this.socketio()}
<CardTitle title="Threads" subtitle="" />
<CardText>
Message threads
<div>
{
this.state.threads.map(function(item) {
return (<ListItem
leftAvatar={<Avatar src="profile pic" />}
primaryText={item.user1}
secondaryText={test({item})}
secondaryTextLines={2}
/>
);
})
}
</div>
<Paper style={Sty2} >
<input type="text" ref="message1" />
<input type="text" ref="message2" />
<input type="button" onClick={this._sendmessage} value="Send message" />
</Paper>
</CardText>
<CardActions>
</CardActions>
</Paper>
);
}
});
将 this.state.threads.map 更改为:
//es6
this.state.threads.map(item => { //use arrow functions in es6 for this binding/readability
return (
<ListItem
leftAvatar={<Avatar src="profile pic" />}
primaryText={item.user1}
secondaryText={this.test(item)} //changed item here to be the item as opposed to a new object of { item: item } as in your previous code.
secondaryTextLines={2}
/>
);
})
//es5
this.state.threads.map(function(item) { //use arrow functions in es6 for this binding/readability
return (
<ListItem
leftAvatar={<Avatar src="profile pic" />}
primaryText={item.user1}
secondaryText={this.test(item)} //changed item here to be the item as opposed to a new object of { item: item } as in your previous code.
secondaryTextLines={2}
/>
);
}.bind(this))
相关文章:
- 从 HTML 组件调用 Javascript
- 反应组件调用了两次(AJAX调用异步)
- Vue.js 从另一个组件调用方法
- 从反应组件调用外部Javascript函数
- 如何在React Native中使用Navigator对正在转换为的组件调用方法
- 如何包含多个组件,然后可能从一个组件调用另一个组件
- 当子组件有嵌套的多个父组件时,从子组件调用超父函数
- 在reactjs中,从父组件调用并传递参数给子组件的函数
- React:从非所有者父组件调用函数
- 从Ember 2.0组件调用控制器动作
- 从另一个组件调用React VideoJS组件的方法
- 不能使用React从子组件调用父组件中的函数
- 如果不在主代码流中,ActiveX组件调用的回调函数不会触发
- 如何从不同的组件调用函数
- JavaScript,只在需要时才加载组件/调用方法
- Angular2从另一个组件调用函数
- Knockoutjs:从子组件调用父组件的函数
- 如何从子组件调用父组件中的方法
- 为什么用jQuery组件调用函数会重新加载xhtml页面
- 如何在 React 中从另一个组件调用组件的方法