Есть код для вывода комментариев. Но при событии onClick с помощью метода addNewPost() выводиться 2 дублирующих комментария вместо одного. По факту в state с помощью .push идет 2 объекта. Что я упустил здесь? Спасибо тем кто поможет.
import React from 'react'
import './postLog.css';
import './makeMessage.css';
import PostItem from './PostItem';
class PostLog extends React.Component {
constructor(props) {
super(props);
this.state = {
posts: []
};
console.log(this.state.posts)
}
auto_grow = (event) => {
event.target.style.height = "5px";
event.target.style.height = (event.target.scrollHeight) + "px";
}
addNewPost = () => {
let textArea = document.querySelector(".body-page__hero-posts-textarea-input")
let time = new Date().toLocaleTimeString().slice(0, -3)
let date = new Date().toLocaleDateString()
let userNik = this.props.name
this.setState(function () {
return this.state.posts.push(
{
nikName: userNik,
dataDate: `${date}`,
dataTime: `${time}`,
textBody: textArea.value
}
)
});
console.log(this.state.posts)
}
render() {
return (
<div className="body-page__hero-posts-log">
<div className="body-page__hero-posts">
<div className="body-page__hero-posts-title">Add message</div>
<div className="body-page__hero-posts-textarea">
<textarea onInput={this.auto_grow} className="body-page__hero-posts-textarea-input" type="text" placeholder="some news?.." />
</div>
<div className="body-page__hero-posts-submit">
<button onClick={this.addNewPost} type="submit" className="blue-btn" id="neon-text">Publish</button>
</div>
</div>
<div className="body-page__hero-posts-logs-wrapper">
{
this.state.posts.map((item) => (item ? <PostItem key={Math.floor(Math.random() * 10000)} nikName={item.nikName} dataDate={item.dataDate} dataTime={item.dataTime} textBody={item.textBody} /> : null))
}
</div>
</div>
);
}
}
export default PostLog;
Не используйте push
this.setState({
posts : [...this.state.posts, {
nikName: userNik,
dataDate: `${date}`,
dataTime: `${time}`,
textBody: textArea.value
}]
});
корень проблемы лежит в имутабельности объектов. Вы не изменяете сам state
, а задаете новый клонированный из старого с добавлением нового элемента.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возможно ли сделать высоту элемента таким образом, чтобы он был до самого низа экрана? То есть верхом он цепляется как android:layout_below="@id/someID"...
В первом методе выводится значение false, во втором - trueМои мысли: в test1(), когда создается d - уже в String Pool существует c
Пытаюсь понять, почему во вложенном цикле for (int j = 0; j < nums[i]length; j++) j < nums[i]