и спасибо за чтение этого вопроса, я новичок в React и пытаюсь создать приложение для задач, поэтому я делаю это.
Приложение. js
import React, { Component }from 'react'
import ReactDOM from 'react-dom'
import TaskForm from './components/TaskForm';
import tasks from './samples/tasks.json'
import Tasks from './components/tasks'
class App extends Component{
state ={
tasks : tasks
}
addTask = (title, description) =>{
const newTask = {
title : title,
description : description,
id : this.state.tasks.lenght
}
this.setState({
tasks : [...this.state.tasks, newTask]
})
console.log(this.state)
}
render(){
return(
<div>
<TaskForm addTask={this.addTask}/>
<Tasks tasks={tasks}/>
</div>
)
}
ReactDOM.render(<App/>, document.getElementById('root'));
задачи. json
[
{
"id": 0,
"title": "espada",
"description": "esta es un arma japonesa que bla bla bla bla bla bla bla bla",
"done" : false
},
{
"id": 1,
"title": "pistola",
"description": "pistola semi-automatica que sirve para pegar tiros bla bla bla",
"done" : false
},
{
"id": 2,
"title": "ballesta",
"description": "loren ipsum dolor no se que carajos seguia despues bla bla bla",
"done" : false
},
{
"id": 3,
"title": "sable pistola",
"description": "sacado de la franquisia de juegos",
"done" : false
}
]
задачи. js
import React, { Component } from 'react';
import Task from './Task';
import propTypes from 'prop-types';
export default class Tasks extends Component{
render (){
return(
this.props.tasks.map(task => <Task task={task} key={task.id}/> )
);
}
}
Tasks.propTypes = {
tasks : propTypes.array.isRequired
}
задача. js
import React,{ Component } from "react";
import propTypes from 'prop-types';
export default class Task extends Component{
state = {
done : this.props.task.done
}
styleCompleted(){
return {
fontSize : '20px',
color : this.props.task.done ? 'grey' : 'black',
textDecoration : this.props.task.done ? 'line-through' : 'none'
}
}
render(){
const {task} = this.props; // con esta linea extraemos el arreglo que nos stan devolviendo y lo guardamos en otro llamado task
return(
<div style={this.styleCompleted()}>
{task.title} -
{task.id} -
{task.description}
<input type="checkbox"/>
<button style={btnDelete}>
x
</button>
</div>
);
}
}
Task.propTypes = {
task : propTypes.object.isRequired
}
const btnDelete = {
fontSize : '18px',
background : 'red',
color : '#fff',
border : 'none',
padding : '10px 15px',
borderRadius : '50%',
cursor : 'pointer'
}
taskForm. js
import React, { Component} from 'react';
export default class TaskForm extends Component{
state = {
title : '',
description : ''
}
onSubmit = e =>{
e.preventDefault(); // if put this line after addTask the page refresh
this.props.addTask(this.state.title, this.state.description);
}
onChange = e =>{
console.log(e.target.name, e.target.value);
this.setState({
[e.target.name] : e.target.value});
}
render(){
console.log(this.props)
return(
<form onSubmit={this.onSubmit}>
<input
name="title"
type="text"
placeholder="write a task"
onChange={this.onChange}
value={this.state.title}/>
<br/>
<br/>
<textarea
name="description"
placeholder="write a description"
onChange={this.onChange}
value={this.state.descirption}/>
<br/>
<input type="submit"/>
</form>
);
}
}
когда я пытаюсь добавить newTask при первом щелчке, ничего не происходит, но при втором добавляется newTask (Oo) \, но просто в состоянии не отображаются в пользовательском интерфейсе. любое предложение ???