- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过创建应用程序来学习 React,但我认为我低估了它的复杂性。让我与您分享,看看我是否正确:
这个想法是创建一个 React 应用程序来跟踪我想学习的科目。我创建了以下结构:
MainTopic:
-- title: String
-- percentage_completed: Number
-- Topic: Array
---- Subtopic: Array
---- title: String
---- percentage_completed: Number
------ Resources: Array
------ title: String
------ link: String
------ completed: Boolean
JSON 结构应如下所示 - 文档由其父级的 _id 固定:
{
"title": String,
"percentage_completed": Number
"topic":[
{
"title":String,
"percentage_completed":Number
"subtopic":[
{
"title":String
"percentage_completed": Number
"resources":[
{
"title":String
"link": String
"concluded": Boolean
}
]
}
]
}
]
}
每个主题称为 MainTopic,它下面有很多主题,例如:JavaScript 有 NodeJS、数据结构和算法作为主题,Express 是 Node 的子主题等等...
我有一个 NodeJS API 提供 JSON 服务,以获取已存储在数据库中的文档的完整列表及其每个特定部分、MainTopics、给定 MainTopic 的主题等。等等...这里是 JSON它返回:
[
{
"topics": [
{
"subtopics": [
{
"resources": [
{
"_id": "5b857b00c346783a24cbdbb5",
"subtopic_id": "5b857ad0c346783a24cbdbb4",
"title": "Udemy Course",
"link": "https://udemy.com/dictionaires-nodejs",
"concluded": false,
"__v": 0
}
],
"_id": "5b857ad0c346783a24cbdbb4",
"title": "Dictionaries",
"percentage_concluded": 0,
"topic_id": "5b857a12c346783a24cbdbae",
"__v": 0
}
],
"_id": "5b857a12c346783a24cbdbae",
"maintopic_id": "5b8565b90c927b2c47df7d9d",
"title": "Node.js",
"percentage_concluded": 0,
"__v": 0
},
{
"subtopics": [
{
"resources": [],
"_id": "5b857ab8c346783a24cbdbb3",
"title": "Lists",
"percentage_concluded": 0,
"topic_id": "5b857a1ac346783a24cbdbaf",
"__v": 0
}
],
"_id": "5b857a1ac346783a24cbdbaf",
"maintopic_id": "5b8565b90c927b2c47df7d9d",
"title": "Java",
"percentage_concluded": 0,
"__v": 0
},
{
"subtopics": [
{
"resources": [
{
"_id": "5b857a91c346783a24cbdbb2",
"subtopic_id": "5b857a6ec346783a24cbdbb1",
"title": "Udemy Course",
"link": "https://udemy.com",
"concluded": false,
"__v": 0
}
],
"_id": "5b857a6ec346783a24cbdbb1",
"title": "Variables",
"percentage_concluded": 0,
"topic_id": "5b857a21c346783a24cbdbb0",
"__v": 0
}
],
"_id": "5b857a21c346783a24cbdbb0",
"maintopic_id": "5b8565b90c927b2c47df7d9d",
"title": "Python",
"percentage_concluded": 0,
"__v": 0
}
],
"_id": "5b8565b90c927b2c47df7d9d",
"title": "Programming Languages",
"percentage_concluded": 30,
"__v": 0
}
]
我想启动 React 部分,但我真的不确定如何构建它,我的意思是,我应该创建 1 个组件来处理请求的全部数据量,还是应该为每个移动部分创建一个组件?就像...一个用于主主题的组件,一个用于主题,一个用于子主题,一个用于每个资源。
到目前为止,我有以下 Reac 代码:
App.js
components/
Learning.js
Resource.js
Header.js
主应用程序文件App.js
import React, { Component } from 'react';
import Header from './components/Header';
import 'bootstrap/dist/css/bootstrap.min.css';
import './App.css';
import Learning from './components/Learning';
import './index.css';
class App extends Component {
render() {
return (
<div className="App">
<Header branding="Learn Tracker"/>
<div className="container">
<Learning />
</div>
</div>
);
}
}
export default App;
另一个Learning.js
:
import React, { Component } from 'react'
import Resource from './Resource';
import axios from 'axios';
class Learning extends Component {
constructor(props){
super(props);
this.state = {
resource: [{}]
}
this.fetchData();
}
fetchData(){
axios.get('/api/all')
.then(result => {
this.setState({resource: result.data});
})
.catch(err => {
console.log(err);
});
}
render() {
const {resource} = this.state;
resource.map((resource) => {
return (
<Resource resource={resource} />
)
});
return(
<div>
{resource}
</div>
);
}
}
export default Learning;
Resource.js
:
import React, { Component } from 'react';
import PropTypes from 'prop-types';
class Resource extends Component {
render() {
const {resource} = this.props;
return (
<div className="card mb-3">
<div className="card-header">
<h4>{ resource[0].maintopic.title }</h4>
</div>
<div className="card-body">
<h4 className="card-title">{ resource[0].maintopic.topic.title }</h4>
<ul className="list-group">
<li className="list-group-item">
{ resource[0].maintopic.topic.subtopic.title }
<div className="card-body">
<ul className="list-group list-group-flush">
<li className="list-group-item">Title: { resource[0].maintopic.topic.subtopic.resources[0].title }</li>
<li className="list-group-item">Link: { resource[0].maintopic.topic.subtopic.resources[0].link }</li>
<li className="list-group-item">Concluded: { resource[0].maintopic.topic.subtopic.resources[0].concluded }</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
)
}
}
Resource.propTypes = {
resource: PropTypes.object.isRequired
}
export default Resource;
最后是 Header.js
:
import React from 'react'
import PropTypes from 'prop-types';
import 'bootstrap/dist/css/bootstrap.min.css';
import '../App.css';
import '../index.css';
const Header = props => {
const { branding } = props;
return (
<nav className="navbar navbar-expand-sm navbar-dark bg-primary mb-3 py-3">
<div className="container">
<a href="/" className="navbar-brand">{branding}</a>
<div>
<ul className="navbar-nav mr-auto">
<li className="nav-item">
<a href="/" className="nav-link">Home</a>
</li>
<li className="nav-item text-white"><p className="nav-link"><span className="branco">|</span></p></li>
<li className="nav-item">
<a href="/" className="nav-link">About</a>
</li>
</ul>
</div>
</div>
</nav>
)
}
Header.defaultProps = {
branding: "Learning Tracker"
}
Header.PropTypes = {
branding: PropTypes.string.isRequired
}
export default Header;
请帮助我了解如何找到应用程序结构的最佳解决方案。
提前谢谢您。
致以诚挚的问候。
最佳答案
我认为在 React 中安排文件结构的最佳和最简单的方法是使用独立组件。在这种方法下,您可以用尽可能小的单元(组件)构建您的应用程序。这些组件将包含在任何地方运行所需的所有组件。这种方法的主要优点是它鼓励高水平的代码可重用性。
如果您拔出一个组件并将其插入到一个完全不同的应用程序中,它的运行方式将与在之前的应用程序中运行的方式完全相同。下面介绍了如何构建您的应用程序;
├── src
│ ├── components // Dumb components should go here -> they should be stand-alone components
│ │ ├── App // App should should render all the main topics
│ │ │ ├── index.js // Component logic and jsx
│ │ │ ├── index.test.js // Component tests
│ │ │ ├── index.css // Component styles
│ │ ├── Header // All components should have their own index.js and index.test.js files
│ │ │ ├── index.js // Component logic and jsx
│ │ │ ├── index.test.js // Component tests
│ │ │ ├── index.css // Component styles
│ │ ├── MainTopic // MainTopic should be a component on its own because it's repeated. It's in an array.
│ │ │ ├── index.js // Component logic and jsx
│ │ │ ├── index.test.js // Component tests
│ │ │ ├── index.css // Component styles
│ │ ├── SubTopic // SubTopic should be a component on its own because it's repeated. It's in an array.
│ │ │ ├── index.js // Component logic and jsx
│ │ │ ├── index.test.js // Component tests
│ │ │ ├── index.css // Component styles
│ │ ├── Topic // Topic should be a component on its own because it's repeated. It's in an array.
│ │ │ ├── index.js // Component logic and jsx
│ │ │ ├── index.test.js // Component tests
│ │ │ ├── index.css // Component styles
│ ├── index.test.js // Tests for non-components files
│ ├── index.js
│ ├── routes.js // All routes should be registered here
关于javascript - 如何正确拆分React应用程序组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238082/
假设我有这个变量 var image = "image.jpg"; 我正在尝试拆分变量图像的内容并将 _thumbs 插入其中以获得类似 image_thumbs.jpg 的内容。 我该如何解决这个问
我有一个包含多个问题和答案的单元格,其组织方式类似于 CSV。因此,为了将所有这些问题和答案分开,使用逗号作为分隔符的简单拆分应该很容易分开。 不幸的是,有些值使用逗号作为小数分隔符。有没有办法避免这
这是简单的代码: import std.algorithm; import std.array; import std.file; void main(string[] args) { aut
我正在尝试解析一个看起来像的 txt 文件 A - 19 B - 2 C - 3 我正在使用扫描仪方法读取它并在“- ”中拆分,以便我的输出看起来像: A 19 B 2 C 3 但是它似乎没有正确拆分
我有这些网址字符串 file:///home/we/Pictures/neededWord/3193_n.jpg file:///home/smes/Pictures/neededWord/jds_2
我正在解析一个 CVS 文件,如下所示: "07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,
我在脚本中使用以下行返回 $folder 处所有文件夹的所有路径地点。 dir -recurse $folder|?{$_.PSIsContainer}|select -ExpandProperty
我正在尝试将字符串格式化为word+word+word 例如 “超音乐节”变成“超+音乐+节日” 我尝试过使用以下代码 query.split(" ").join("+"); 或 query.repl
我叫 luis,住在 arg。我有一个问题,无法解决。 **IN BASH** pwd /home/labs-perl ls file1.pl file2.pl **IN PERL** my $ls
我想从包 javax.json 中拆分 JsonArray,但我找不到完成这项工作的便捷方法。我查看了文档,只能想到迭代 JsonArray 并使用 JsonArrayBuilder 手动添加项目。
我希望在第一个 ':' 处拆分字符串,以防止字符串的第二部分包含 ':' 时出现问题。我一直在研究正则表达式,但仍然遇到一些问题,有人可以帮我吗?谢谢。 最佳答案 您可以使用overload of s
我想拆分列表的列表 ((A,1,2,3),(B,4,5,6),(C,7,8,9))进入: (A,1) (A,2) (A,3) (B,4) (B,5) ... 我试过rdd.flatMapValues(
我有一个文本文件,其中每一行都有数据。它看起来像这样: number0;text0 number1;text1 number2;text2 ..等等 所以我通过 xmlhttprequest 将该文本
问题很简单——比如说,我得到了函数,它接收数组作为参数 void calc(double[] data) 如何将这些数据“拆分”成两个子数组并像这样传递给子函数 calc_sub(data(0, le
我想显示来自 EMAIL_TEXT 数据库列的数据,在定义的字符处拆分列。出于某种原因,我的结果只打印第一行到我拆分字符串的位置,跳过其余行。这是我希望在每个“|”之后拆分的数据。 这里是要拆分的数据
我有一个动态数组,我想排除字符串的第一部分,但我不知道第一部分之后会有多少对象,我想将它们全部包含在一个新字符串中。 string = "text.'''hi''','''who''' '''are'
我想拆分 URL 的某些特定部分,这是我目前所做的。 var query = window.location.pathname.split( '/' ); query = window.locati
我有一条消息携带 XML(订单),其中包含多个同质节点(比如产品列表)以及其他信息(比如地址、客户详细信息等)。我必须使用另一个外部服务提供的详细信息来丰富每个“产品”,并返回带有丰富“产品”的相同完
我有一个动态生成的大字符串,我正在拆分它。 var myString="val1, val, val3, val4..... val400" 我对此字符串进行了简单的拆分, myString= myS
这个问题在这里已经有了答案: Java String split removed empty values (5 个答案) 关闭 7 年前。 我正在尝试使用 split(";") 将字符串转换为数组
我是一名优秀的程序员,十分优秀!