javascript - 如何在反应中管理状态?
问题描述
我正在实现一个反应应用程序,它显示任务和项目,但我不知道如何管理状态
import React from 'react';
import './App.css';
import Header from './Components/Header.js'
import Projects from './Components/ProjectsList'
import Task from './Components/Task'
import Grid from '@material-ui/core/Grid';
import Typography from '@material-ui/core/Typography';
import Hours from './Components/Hours'
var projects = [
{
"id": 1,
"name": "Fifa19",
'tasks': [
{ id: "1", name: 'diseñar', "progress": 10 },
{ id: "2", name: 'trabajar', "progress": 20 },
{ id: "3", name: 'construir', "progress": 30 },
{ id: "4", name: 'pensar', "progress": 40 },
{ id: "5", name: 'rehacer', "progress": 50 },
]
},
{
"id": 2,
"name": "StarWars",
'tasks': [
{ id: "5", name: 'diseñar', "progress": 10 },
{ id: "6", name: 'trabajar', "progress": 20 },
{ id: "7", name: 'construir', "progress": 30 },
{ id: "8", name: 'pensar', "progress": 40 },
{ id: "9", name: 'rehacer', "progress": 50 },
]
},
{
"id": 3,
"name": "Pocoyo",
'tasks': [
{ id: "10", name: 'diseñar', "progress": 10 },
{ id: "11", name: 'trabajar', "progress": 20 },
{ id: "12", name: 'construir', "progress": 30 },
{ id: "13", name: 'pensar', "progress": 40 },
{ id: "14", name: 'rehacer', "progress": 50 },
]
},
{
"id": 4,
"name": "Doraemon",
'tasks': [
{ id: "15", name: 'diseñar', "progress": 10 },
{ id: "16", name: 'trabajar', "progress": 20 },
{ id: "17", name: 'construir', "progress": 30 },
{ id: "18", name: 'pensar', "progress": 40 },
{ id: "19", name: 'rehacer', "progress": 50 },
]
},
{
"id": 5,
"name": "Lineage 3",
'tasks': [
{ id: "20", name: 'diseñar', "progress": 10 },
{ id: "21", name: 'trabajar', "progress": 20 },
{ id: "22", name: 'construir', "progress": 30 },
{ id: "23", name: 'pensar', "progress": 40 },
{ id: "24", name: 'rehacer', "progress": 50 },
]
}
]
class App extends React.Component {
state = {
'tasks': [
{ id: "1", name: 'diseñar', "progress": 10 },
{ id: "2", name: 'trabajar', "progress": 20 },
{ id: "3", name: 'construir', "progress": 30 },
{ id: "4", name: 'pensar', "progress": 40 },
{ id: "5", name: 'rehacer', "progress": 50 },
]
}
handleViewTask = (projectin) => {
this.setState({
'tasks': [{ id: "100", name: 'diseñar', "progress": 10 }]
})}
render() {
return (
<div className="App">
<Header nombre='Joaquin' /> {/*Entregar como name la variable recibida desde server */}
<Grid container >
<Grid item xs >
<Typography variant="h5" component="h5">
Projects
</Typography>
<Projects projects={projects} />
</Grid>
<Grid item xs >
<Typography variant="h5" component="h5">
Tareas
</Typography>
{
this.state.tasks.map(task =>
<Task
name={task.name}
key={task.id}
progress={task.progress}
/>
)
}
</Grid>
<Grid item xs>
<Typography variant="h5" component="h5">
Configuración
</Typography>
<Hours />
</Grid>
</Grid>
</div>
);
}
}
export default App;
我正在实现一个反应应用程序,它显示任务和项目。一个项目可以有很多任务。我的主视图是所有可用的项目,当单击一个时,您应该看到它们相应的任务。我的问题是:通过良好的实践,我应该如何处理应用程序的状态?是否应该显示任务?
我现在的申请是这样的:
我有一个带有项目组件和其他任务的应用程序组件。每一个都分别有几个项目和任务组件。
解决方案
这取决于您的设计。您可以在同一屏幕上显示项目的任务,或者您可以有一个单独的页面来执行此操作。此外,由于您没有处理此数据的后端服务,因此在如何处理状态方面没有太多选项可供选择。
如果要在同一页面中显示任务,则必须将状态修改为与项目变量非常相似:
state={
{
"id": 1,
"name": "Fifa19",
'tasks': [
{ id: "1", name: 'diseñar', "progress": 10 },
{ id: "2", name: 'trabajar', "progress": 20 },
{ id: "3", name: 'construir', "progress": 30 },
{ id: "4", name: 'pensar', "progress": 40 },
{ id: "5", name: 'rehacer', "progress": 50 },
]
},
{
"id": 2,
"name": "StarWars",
'tasks': [
{ id: "5", name: 'diseñar', "progress": 10 },
{ id: "6", name: 'trabajar', "progress": 20 },
{ id: "7", name: 'construir', "progress": 30 },
{ id: "8", name: 'pensar', "progress": 40 },
{ id: "9", name: 'rehacer', "progress": 50 },
]
},
{
"id": 3,
"name": "Pocoyo",
'tasks': [
{ id: "10", name: 'diseñar', "progress": 10 },
{ id: "11", name: 'trabajar', "progress": 20 },
{ id: "12", name: 'construir', "progress": 30 },
{ id: "13", name: 'pensar', "progress": 40 },
{ id: "14", name: 'rehacer', "progress": 50 },
]
},
{
"id": 4,
"name": "Doraemon",
'tasks': [
{ id: "15", name: 'diseñar', "progress": 10 },
{ id: "16", name: 'trabajar', "progress": 20 },
{ id: "17", name: 'construir', "progress": 30 },
{ id: "18", name: 'pensar', "progress": 40 },
{ id: "19", name: 'rehacer', "progress": 50 },
]
},
{
"id": 5,
"name": "Lineage 3",
'tasks': [
{ id: "20", name: 'diseñar', "progress": 10 },
{ id: "21", name: 'trabajar', "progress": 20 },
{ id: "22", name: 'construir', "progress": 30 },
{ id: "23", name: 'pensar', "progress": 40 },
{ id: "24", name: 'rehacer', "progress": 50 },
]
}
}
或者,如果您希望您的应用程序单独处理它,您需要使用 react-router 将路由映射到您的其他组件并传递道具以显示您想要的数据。就像是:
<Route
path='/tasks'
render={(props) => <Tasks{...props}/>}
/>
在这种情况下,Tasks 将是一个功能/哑组件,因为它仅用于显示数据,并且仅在用户单击项目或您可能想要触发的任何事件时显示。
推荐阅读
- python - 从 main 中的类调用函数
- scala - 使用带有子类型参数的超级方法
- python - 将python输出放入数据框中的问题
- matlab - 上下分屏实验
- node.js - 我想在运行 nightmare.js 后获取 gig 中的所有数据,但我不断得到 gig 未定义
- javascript - 将鼠标悬停在 Javascript 和/或 CSS 列表中的相应单词上时,如何显示不同的图像?
- python - 训练和验证的不同 Keras 增强
- oracle - 在 SQL Server 中有一个我想在 Oracle 中复制的计数器
- android - 旋转屏幕时可用蓝牙设备的 ListView 变为空白
- java - Android Firebase:如果 OnCompleteListener 在主应用程序线程上调用,它如何异步工作?