1
將消息添加到對話時使用了反應轉換。它始終工作時,我按發送按鈕,但當我確認'輸入'它不工作 - Opera和Chrome。在Chrome中,有時候我會覺得轉換髮生得非常快。ReactCSSTransitionGroup與受控組件不起作用組件
const userMessage = {
userImage: userImage,
userName: 'Jason Leapman',
date: '19:56',
message: `Agriculture fed larger`
const guestMessage = {
userImage: guestImage,
userName: 'Adrian Simon',
date: '19:56',
message: `Man's technological ascent`
};
const fakeConversation = [
userMessage,
guestMessage,
guestMessage,
userMessage,
guestMessage
];
export default class extends Component {
constructor() {
super();
this.state = {
message: ''
}
}
renderConversation() {
return fakeConversation.map(
(message, i) => <Message key={i} message={message}/>
);
}
sendMessage() {
this.setState(prevState => {
const {message} = prevState;
if (message) {
const newMessage = Object.assign({}, {...userMessage}, {message});
fakeConversation.push(newMessage);
return {message: ''};
}
});
return false;
}
onChange(e) {
this.setState({message: e.target.value});
}
onKeyPress(e) {
if (e.key === 'Enter') {
e.preventDefault();
this.sendMessage();
}
}
render() {
const conversation = this.renderConversation(),
sendMessage = this.sendMessage.bind(this),
{message} = this.state,
onChange = this.onChange.bind(this),
onKeyPress = this.onKeyPress.bind(this);
return (
<Col componentClass="section" xs={12} className="Conversation">
<div ref={list => this.conversationList = list} className="conversation-list">
<FadingTransition>
{conversation}
</FadingTransition>
</div>
<Row className="message-input-row">
<Col xs={12}>
<MessageInput
id="message-input"
name="message-input"
value={message}
onKeyPress={onKeyPress}
onChange={onChange}
onSendClick={sendMessage}/>
</Col>
</Row>
</Col>
);
}
}
FadingTransition:
export default ({children, component = 'div', appear = true, enter = true, leave = true}) => (
<ReactCSSTransitionGroup
component={component}
className="FadingTransition"
transitionName="fading"
transitionAppear={appear}
transitionEnter={enter}
transitionLeave={leave}
transitionAppearTimeout={100}
transitionEnterTimeout={500}
transitionLeaveTimeout={500}>
{ children }
</ReactCSSTransitionGroup>
);
CSS:
.FadingTransition {
> .fading-enter,
> .fading-leave {
margin-left: -200px;
transition: margin-left .5s ease-out;
&.fading-enter-active,
&.fading-leave-active {
margin-left: 0;
}
}
> .fading-appear{
opacity: 0;
transition: all .1s ease-out;
&.fading-appear-active {
opacity: 1;
}
}
}
怎麼了這onKeyPress
我在這裏幹什麼什麼了嗎?
編輯:
它幫助時,我MessageInput不受控制通過刪除value
但後來我發送消息後不能清除輸入...