<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="node_modules/react/umd/react.development.js"></script>
<script src="node_modules/react-dom/umd/react-dom.development.js"></script>
<script src="node_modules/babel-standalone/babel.min.js"></script>
<script src="node_modules/prop-types/prop_types.min.js"></script>
</head>
<body>
<div id="domReact">
</div>
<script type="text/babel">
// 三目運算符
// let phone=4999;
// let myDom=(
// <div>當前手機價格爲{phone}------{phone>4000?"很貴":"很便宜"}</div>
// )
// var arr=[
// <p>新聞列表1</p>,
// <p>新聞列表2</p>,
// <p>新聞列表3</p>,
// <p>新聞列表4</p>,
// <p>新聞列表5</p>
// ]
// let myDom=(
// <div>{arr}</div>
// )
// let text="點我";
// let linkUrl="http://www.baidu.com"
// let myDom=<a href={linkUrl}>{text}</a>
// let moStyle={color:"red"}
// let myDom=<p style={moStyle}>修改樣式</p>
//列表渲染
// let arr=["study","play","sleep"];
// let myDom=arr.map((item,index)=>{
// return(
// <p key={index}>{item}</p>
// )
// })
// let newArr=[];
// for(let i in arr){
// newArr.push(<p key={i} onClick={()=>{alert("你好")}}>{arr[innerWidth]}</p>)
// }
//對象遍歷
// var obj={name:"古湖",age:"18",phone:"156322"}
// Object.keys(obj).map((v,i)=>{
// return (
// <p>{v}</p>,
// <p>{obj[v]}</p>
// )
// })
//無狀態組件的創建方式
// function first(){
// return (
// <div>無狀態組件</div>
// )
// }
// let myDom=<div>
// <first/><first/>
// </div>
//父子組件
// function MyComA(){
// return(
// <h1>我是第一個組件</h1>
// )
// }
// function MyComB(){
// return (
// <h1>我是第二個組件</h1>
// )
// }
// function MyComC(){
// return (
// <h1>我是第三個組件</h1>
// )
// }
// function MyComD(){
// return (
// <h1>我是第四個組件</h1>
// )
// }
// function Com(){
// return (
// <div>
// <MyComA/>
// <MyComB/>
// <MyComC/>
// <MyComD/>
// </div>
// )
// }
//類組件,組件名首字母大寫
// class MyCom extends React.Component{
// render(){
// return(
// <div>類組件</div>
// )
// }
// }
// let myDom=<MyCom/>
//props是一個重要組件的屬性, 組件對外的接口 我們可以從組件的外部向組件的內部進行數據的傳遞
//也可以完成父子組件數據的傳遞,但是無論是無狀態組件還是類組件,我們都不能更改自身的props
// function Com(props){
// return (
// <div>我是無狀態組件:{props.text}</div>
// )
// }
// class Com extends React.Component{
// render(){
// return (
// <div>我是類組件{this.props.num}</div>
// )
// }
// }
//無狀態的props驗證和默認值(defaultProps)
// function Com(props){
// return (
// <div>{props.name}</div>
// )
// }
// Com.defaultProps={
// name:"我是默認值"
// }
//props驗證(驗證傳進來的數據是否符合我們期望的類型或者要求,上線模式請求取消props驗證)
//1.引用prop-types庫 npm install --save prop-types
// Com.propTypees={
// name:PropTypes.number,
// age:PropTypes.isRequired
// }
//如何渲染外部數據
// let MyCom=(props)=>{
// return(
// <div>我是子組件
// {
// props.arr.map((v,i)={
// return <p></p>
// })
// }
// </div>
// )
// }
// let Com=()=>{
// return (
// <div>
// 我是父組件
// <MyCom arr={dataArr}/>
// </div>
// )
// }
//state狀態
//state狀態和props的區別
//props是組件對外的接口 state是組件對內的接口
//上層組件可以通過下層組件中props來進行數據的傳遞,因此props就是組件對外的接口,組件除了上層傳遞的數據之外,他自身也需要數據的管理,對內管理數據的屬性就是state
// 主要區別
// 1.state是可變的
// 2.props對於當前頁面的組件來說,只是數據之間的傳遞
//在ES6中不管類寫不寫constructor 在new實例的時候都會不上constructor
//但是如果寫了,之後都必須在其中協商super()就是指向父類的構造方法
// class Com extends React.Component{
// constructor(props){
// super(props)
// this.state={
// name:"嘻嘻",
// age:"18"
// }
// }
// render(){
// return (
// //this.setState({keys:newValue})
// <button οnclick={()=>{this.setState({name:"哈哈"})}}></button>
// <div>{this.state.name}</div>
// )
// }
// }
//state進階
//this.setState()是異步的
// class Com extends React.Component{
// constructor(props){
// super(props)
// this.state={
// name:"嘻嘻"
// }
// }
// function=()=>{
// this.setState({
// name:"哈哈"
// })
// }
// render(){
// return(
// <div>
// <button οnclick={this.function}></button>
// {this.state.name}
// </div>
// )
// }
// }
//轉發refs react當中提供了一個ref的數據(不能再無狀態組件當中來進行使用,因爲無狀態組件沒有實例)
//react提供的三種方式進行ref的使用
// 1.字符串的方式
// 2.回調函數
// 3.React.createRef()(react16.3提供的一種新方式) 使用ref的current屬性拿到這個節點
// class Com extends React.Component{
// constructor(props){
// super(props)
// this.myRef=React.reactRef();
// }
// func=()=>{
// console.log(this.refs.demoInput.value)
// console.log(this.textinput.value)
// console.log(this.myRef.current.value)
// }
// render(){
// return (
// <div>
// 我是組件
// <input type="text" ref="demoInput" placeholder="請輸入"/>
// <input type="text" ref={(input)=>{this.textinput=input}} placeholder="請輸入"/>
// <input type="text" ref={this.myRef} placeholder="請輸入"/>
// <button onClick={this.func}>點我得到輸入框值</button>
// </div>
// )
// }
// }
//react事件處理 react綁定事件採用小駝峯命名法,在綁定函數的時候不能加()--函數立即執行
// 1.修改this指向
// 2.bind方式原定綁定
// 3.consternation中提前綁定
// 4.把事件的調用寫成箭頭函數的調用方式
// class Com extends React.Component{
// constructor(props){
// super(props)
// this.funa=this.funa.bind(this)
// }
// funa() {
// console.log(this)
// }
// funa=()=>{
// console.log(this)
// }
// fune=(i,e)=>{
// console.log(i)
// console.log(e)
// }
// render(){
// return(
// <div>我是組件
// <button onClick={this.funa.bind(this)}>bing方式綁定</button>
// <button onClick={this.funa}>箭頭函數綁定</button>
// <button onClick={this.funa}>提前綁定</button>
// <button onClick={()=>{this.funa()}}></button>
// <h1>函數實參傳遞</h1>
// <button onClick={this.fune.bind(this,"我是參數內容")}>點我傳參</button>
// <button onClick={(e)=>{this.fune("參數",e)}}>點我傳參</button>
// </div>
// )
// }
// }
// class Com extends React.Component{
// constructor(props){
// super(props)
// this.state={
// bool:true
// }
// }
// func(){
// this.setState({
// bool:!this.state.bool
// })
// }
// render(){
// let text;
// if(this.state.bool){
// text="你好"
// }else{
// text="登錄錯誤"
// }
// return(
// <div>
// 我是組件
// <button onClick={this.func.bind(this)}></button>
// {text}
// </div>
// )
// }
// }
//狀態提升 多個組件需要反映相同的變化數據,提升到他們最近的一個父組件
//多個子組件需要利用到對方狀態的情況下 那麼這個時候就需要使用到狀態提升
class Demo1 extends React.Component{
constructor(props){
super(props)
}
render(){
return (
<div>
我是第一個組件 {this.props.text}
</div>
)
}
}
class Demo2 extends React.Component{
constructor(props){
super(props)
}
render(){
return (
<div>
我是第二個組件 {this.props.text}
</div>
)
}
}
class Com extends React.Component{
constructor(props){
super(props)
this.state={
content:"我是兩個人都想使用的數據"
}
}
func=()=>{
this.setState({
content:"修改數據"
})
}
render(){
return (
<div>
我是組件
<button onClick="this.func">點我修改</button>
<Demo1 text={this.state.content}/>
<Demo2 text={this.state.content}/>
</div>
)
}
}
ReactDom.render(<Com text={demo} />,document.getElementById("demoReact"));
//create-react-app 是facebook官方推出的一款react腳手架
//電腦上基於node環境,升級到最新版本
//安裝
// npm install -g create-react-app
// create-react-app --version
// cd 文件夾 create-react-app 項目名稱
// npm start 啓動項目
</script>
<script>
var obj={
name:"小明",
age:"18"
}
console.log(obj.name) 點的方式會方便很多
console.log(obj["name"]) 如果key是一個變量就不能用點
Object.keys() 返回數組類型,它的值是對信息中的鍵
Object.values() 返回數組類型,它的值是對信息中的值
組件的作用:高耦合(邏輯緊密的內容放在一個組件中),低內聚(不同組件的依賴關係儘量鋼化,每個組件儘可能獨立)
react的組件分爲3個部分 1.屬性props 2.狀態state 3.生命週期
組件就是來實現頁面功能的
組件的創建:1.函數聲明
</script>
</body>
</html>
React之第一次記錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.