다른 구성 요소를 반환하는 Tasks 구성 요소가 있습니다. 그러나 작업 구성 요소에서 하위 구성 요소 중 하나의 상태를 변경하면 다시 렌더링되지 않습니다.React 하위 구성 요소가 상태 변경시 다시 렌더링되지 않습니다.
부모 컴포넌트에서 자식 컴포넌트로 'newTaskAdded'상태를 전달하고 자식 컴포넌트를 다시 렌더링하기 위해 자식 상태로 할당하지만 여전히 발생하지 않습니다.
목표 : 사용자가 작업을 추가하면 화면에 즉시 표시되어 사용자가 새 작업을보기 위해 페이지를 새로 고쳐야한다는 의미입니다.
Tasks.jsx :
import React , { Component } from 'react'
import axios from 'axios'
import Name from './Name.jsx'
import ShowTasks from './ShowTasks.jsx'
class Tasks extends Component {
constructor(props) {
super(props)
this.state={
task: '',
newTaskAdded:false,
newTask:[],
}
this.handleChange = this.handleChange.bind(this)
this.addTask = this.addTask.bind(this)
}
handleChange(event) {
this.setState({task: event.target.value})
}
addTask() {
axios.post('/api/addtask',{
name:this.props.name,
task:this.state.task
})
.then((res) => {
if(res.status=='200'){
this.setState ({task:''})
this.setState ({newTaskAdded:true})
this.setState ({newTask: res.data.message[res.data.message.length-1] })
}
})
.catch((err) => {
if(err) throw err
})
}
render() {
return (
<div>
<div>
<Name name={this.props.name} />
</div>
<div>
<input value={this.state.task} onChange={this.handleChange} type="text" name="task" />
<button type="button" onClick={this.addTask}>Add Task</button>
</div>
<ShowTasks name={this.props.name} updated={this.state.newTaskAdded} />
</div>
)
}
}
export default Tasks
ShowTasks.jsx 그래서 문제가이 상태로 소품을 설정하는 아이의 기능에
import React , { Component } from 'react'
import axios from 'axios'
import Completed from './Completed.jsx'
import NotCompleted from './NotCompleted.jsx'
class ShowTasks extends Component {
constructor(props) {
super(props)
this.state = {
tasks:[],
updated:this.props.updated
}
}
componentWillMount(){
axios.post('/api/loadtasks', {
name: this.props.name
})
.then((res) => {
console.log('res', res);
this.setState ({tasks:res.data.tasks})
})
.catch((err) => {
throw err
})
}
render() {
return (
<div className='pointer'>
{this.state.tasks.map((task) => {
if(task.completed) {
return <Completed key={task._id} {...task} />
}
else {
return <NotCompleted key={task._id} {...task} />
}
})}
</div>
)
}
}
export default ShowTasks
당신은'then' 부분이 실행되고 있는지 확인 있습니까? 콘솔 로그를 가져 왔습니까? – Chris
중복 : http://stackoverflow.com/a/41971336/3734057 – absolutezero
응답 해 주셔서 감사합니다. 작동하지 않습니다. – EJ92