react基礎語法

一、注釋
在js寫xml就是jsx語法

const element = <div>
  {
    //jsx單行注釋
    /*
      jsx多行注釋
    */
  }
  <h1>Hello World</h1>
</div>;
ReactDOM.render(
  element,
  document.querySelector("#app")
);
//返回jsx
function fn(){
  return (  //這是js注釋
    <div>
      {/*這是jsx注釋*/}
      <h1>Hello World</h1>
    </div>
  )
}
const element = fn();
ReactDOM.render(
  element,
  document.querySelector("#app")
);

二、插值

const person = {
  name : "張三",
  age : 18,
  sex : 0,
  like : "女"
}
function getSex(){
  if(person.sex){
    return "性別:女";
  }
  return "性別:男";
}
const element = (
  <div>
    <h2>Hello React</h2>
    <h2>我是:{person.name}</h2>
    <h2>今年:{person.age}</h2>
    <h2>性別:{person.sex}</h2>
    <h2>
      {getSex()}
    </h2>
    {
      //jsx里面不能 if else 判斷,可以用三元表達式,也可以調用函數
    }
    <h2>{person.sex?'女':'男'}</h2>
    <h2>愛好:{person.like}</h2>
    <h3>
      {
        //自執行函數也可以,在花括號里面是正兒八經的js代碼
        (function(){
          if(person.sex){
            return <i>性別:女</i>;
          }
          return <i>性別:男</i>
        })()
      }
    </h3>
  </div>
);
ReactDOM.render(
  element,
  document.querySelector("#app")
);

三、節點屬性

const element = (
  <div>
    {
      //class -> className
      //單標簽一定閉合
      //value ->defaultValue
      //checked -> defaultChecked
      //從數據結構里面取值
    }
    <h2 className="active">標題</h2>
    <input type="button" defaultValue="123" title="123" />
    <input type="radio" defaultChecked />
  </div>
);
ReactDOM.render(
  element,
  document.querySelector("#app")
);

四、列表渲染

//數據可以是數字、字符串、標簽(不要加引號,加了引號就是字符串,要綁定key唯一標識,提升性能diff)
const arr = [1, 2, 3];
const arr2 = ['a', 'b', 'c'];
const arr3 = [<li key="1">1</li>, <li key="2">2</li>, <li key="3">3</li>];
const element = (
  <ul>
    {arr3}
  </ul>
);
const arr4 = [
  {
    name:"張三",
    age:18
  },
  {
    name:"李四",
    age:18
  }
];
const element2 = [];
arr4.forEach((item, index) => {
  element2.push(<li key={index}>name:{item.name} - age:{item.age}</li>);
})
const element3 = (
  <div>
    <h2>
      {
        //如果數據是json對象,要用JSON.stringify編譯成字符串,當做文本插入到頁面中
      }
      {JSON.stringify(arr4)}
    </h2>

    <ul>
      {
        (function(){
          const element4 = [];
          arr4.forEach((item, index) => {
            element4.push(<li key={index}>name:{item.name} - age:{item.age}</li>);
          })
          return element4;
        })()
      }
    </ul>
  </div>
);
ReactDOM.render(
  element3,
  document.querySelector("#app")
);

五、事件處理

function fn(){
  alert(1)
}
const element = (
  <div>
    {
      //onClick 事件駝峰命名
      //事件綁定,都會給一個事件處理函數
    }
    <input type="button" defaultValue="事件調用" onClick={fn} />
    <input type="button" defaultValue="行間函數" onClick={()=>{alert(123)}} />
    <input type="button" defaultValue="行間函數" onLoad={alert(456)} />
  </div>
);
ReactDOM.render(
  element,
  document.querySelector("#app")
);

六、無狀態組件

let a = 123;
const element = (
  <div>
    {a}
  </div>
);
//只是普通的變量是沒有狀態的,組件才有狀態或無狀態
//react是單向數據流
//狀態其實就是讓數據驅動視圖的響應式數據
ReactDOM.render(
  element,
  document.querySelector("#app")
);
//不會改變
setTimeout(()=>{
  a = 456;
}, 3000)

七、函數式組件

//這只是一個目標變量
const header = (
  <h2>頭部</h2>
)
const main= (
  <h2>主體</h2>
)
const footer= (
  <h2>底部</h2>
)
//這只是一個目標變量,沒有狀態
const element = (
  <div>
    {header}
    {main}
    {footer}
  </div>
);
//函數式聲明組件
//組件的名字首字母必須是大寫
//也不要用H5新標簽
function Hd(){
  return (
    <h2 className="hd"></h2>
  )
}
//組件傳值,這個也是無狀態的組件,沒有數據變化,視圖也跟著變化
//狀態其實就是讓數據驅動視圖的響應式數據
function Con(props){
  return (
    <h2 className="main">主體內容,{props.name}</h2>
  )
}
function Ft(){
  return (
    <h2 className="footer">底部</h2>
  )
}
//有狀態的組件 -> 讓數據驅動視圖的響應式數據
class MainCon extends React.Component{
  constructor(){
    super();//調用父組件的構造函數,不調用會報錯
    //state就是組件的狀態
    //從后端請求的數據都是掛載state(狀態)上
    //相當于Vue的data
    this.state = {
      name : "張三"
    }

    setTimeout(()=>{
      this.setState({
        name:"李四"
      });
    }, 3000)
  }
  render(){
    return (
      <div>
        <h3>內容{this.state.name}</h3>
      </div>
    )
  }
}

const element1 = (
  <div>
    <Hd />
    <Con name="函數式聲明組件" />
    <Ft />
    <MainCon />
  </div>
);
ReactDOM.render(
  element1,
  document.querySelector("#app")
);
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第一個react程序 注意:需要在html中引入 react.js、react-dom.js、browser.mi...
    胡自鮮閱讀 1,640評論 0 3
  • HTML模版 之后出現的React代碼嵌套入模版中。 1. Hello world 這段代碼將一個一級標題插入到指...
    ryanho84閱讀 6,308評論 0 9
  • JSX是React的核心組成部分,它使用XML標記的方式去直接聲明界面,界面組件之間可以互相嵌套。可以理解為在JS...
    可樂愛上咖啡閱讀 72,073評論 1 63
  • React簡介 (1)簡介 React 起源于 Facebook 的內部項目,因為該公司對市場上所有 JavaSc...
    魚魚吃貓貓閱讀 1,670評論 1 6
  • React.js 小書學習 之 【使用 JSX 描述 UI 信息】 從 JSX 到頁面 過程圖解:JSX 到頁面過...
    zdlucky閱讀 1,300評論 0 20