1. 程式人生 > >React實現題目的小元件

React實現題目的小元件

最近在寫一個android的學習類應用,其中一個就是涉及知識體系,想了一下,決定還是混合webview來寫,方便修復資料的錯誤與更新資料。

由於知識體系,基本就是章節標題,章節條目,涉及重點的顏色突出。

匯入資料就直接用寫好的元件就好了。

這裡用的是react。

比如這個:章節是:資訊化管理,小結是:企業資訊化的發展

下面是元件程式碼:Ui使用是bootstrap3框架

//列表卡片
var ul_card = React.createClass({
	displayName: "ul_card",
	propTypes: {
		ul_type: React.PropTypes.string,
		ul_head: React.PropTypes.string,
		ul_li_items: React.PropTypes.arrayOf(React.PropTypes.String)
	},
	getInitialState: function getInitialState() {
		return {
			ul_head: this.props.ul_head,//接收章節名
			ul_type: this.props.ul_type,//接收章節型別,紅色重要,綠色等
			ul_li_items: this.props.ul_li_items//接收小結,陣列
		};
	},
	render: function() {
		return React.createElement(
			"div", {
				className: "container"
			},
			React.createElement(
				"div", {
					className: this.props.ul_type
				},
				React.createElement(
					"small",
					null,
					this.props.ul_head
				)
			),
			React.createElement(
				"ul", {
					className: "list-group"
				},//迴圈渲染小結
				this.props.ul_li_items.map(function(row, rowid) {
					return React.createElement(
						"li", {
							className: "list-group-item",
							key: rowid
						},
						row
					);
				})
			)
		);
	}
});

渲染程式碼:

在需要的html頁面引入js(如果是JSX需要轉換一下,es6也需要換一下,這裡直接browser.js處理了,很慢。。)

<div id="il_card"></div>
//渲染js
ReactDOM.render(
		React.createElement(ul_card,{
		ul_head:"4.3資訊化管理",
		ul_type:"sl_green",
		ul_li_items:[
			"企業資訊化管理的發展"
		]
	}),document.getElementById('ul_card')
	);

這樣就好啦。這只是一個條例,很多的時候們就可以方便使用了。

下面是多個條例。

還有一個就是尾部,會有一個結束提示,比如,章節結束,每個頁面都會有,直接用小元件。

雖然這個很簡單,但是如果網站尾部都這樣使用,就很大的簡化的步驟。

程式碼:

//渲染程式碼
ReactDOM.render(
		React.createElement(over_tips,{tips:"本章節結束"}),document.getElementById("over_tips")
		);
//元件程式碼:
//結束提示元件
var over_tips = React.createClass({
	displayName: "over_tips",

	propTypes: {
		tips: React.PropTypes.string//接收引數
	},
	getInitialState: function getInitialState() {
		return {
			tips: this.props.tips
		};
	},
	render: function() {
		return React.createElement(
			"div", {
				className: "container"
			},
			React.createElement(
				"button", {
					className: "btn btn-success col-xs-12"
				},
				this.props.tips
			)
		);
	}
});

這是一個案例大題:

同樣的程式碼:

//案例元件
var eg = React.createClass({
	displayName: "eg",
	propTypes: {
		eg_title: React.PropTypes.string,
		eg_content: React.PropTypes.string,
		eg_how: React.PropTypes.arrayOf(React.PropTypes.string)
	},
	getInitialState: function getInitialState() {
		return {
			eg_title: this.props.eg_title,
			eg_content: this.props.eg_content,
			eg_how: this.props.eg_how
		};
	},
	render: function() {
		return React.createElement(
			"div", {
				className: "container-fluid"
			},
			React.createElement(
				"div", {
					className: "eg_head panel"
				},
				React.createElement(
					"div", {
						className: "panel-heading"
					},
					React.createElement(
						"h4", null, this.props.eg_title)),
				React.createElement(
					"div", {

						className: "panel-body"
					},
					React.createElement(
						"div", {
							className: "eg_content"
						}, this.props.eg_content),
					React.createElement(
						"ul", {
							className: "list-group"
						},
						this.props.eg_how.map(function(row, rowid) {
							return React.createElement(
								"li", {
									className: "list-group-item green",
									key: rowid
								},
								row)
						})
					)
				)
			),

		)
	}

});

下面是答案:

為什麼分開寫呢,因為,答案太細了。。。還有就是不太熟悉react

檢視解析,直接用react的onclick就好了。程式碼就不放了,基本一致,主要就是設計好分層的條例。就顯得好看多了、

最後,別直接用browser轉換,慢、有時候巨慢。還報錯。