站長資訊網
        最全最豐富的資訊網站

        react通信有哪些方式

        react通信方式有:1、用props進行父子組件通信;2、用回調函數進行子父組件通信;3、用變量提升進行兄弟組件通信;4、用Context進行跨組件通信;5、用node的events模塊進行單例通信;6、用redux共享數據通信。

        react通信有哪些方式

        本教程操作環境:Windows7系統、react17.0.1版、Dell G3電腦。

        React的六種通信方式

        1.props父子通信
        2.回調函數,子父通信
        3.變量提升,兄弟組件通信
        4.Context,跨組件通信
        5.node的events模塊的單例通信
        6.redux共享數據通信

        1.props父子通信

        function Children(props) {       return (         <div>           <p>Children</p>           <p>{props.text}</p>         </div>       )     }     function Parent() {       return (         <div>           <p>Parent</p>           <Children text="這是爸爸傳給你的東西"></Children>         </div>       )     }          export default Parent

        2.回調函數,子父通信

        function Children(props) {   return (     <div>       <p>Children</p>       <p>{props.text}</p>       <button onClick={() => { props.handleChange('改變了') }}>         點擊我改變爸爸傳給我的東西       </button>     </div>   ) }  function Parent() {   let [text, setText] = useState('這是爸爸傳給你的東西')   function handleChange(val) {     setText(val)   }   return (     <div>       <p>Parent</p>       <Children handleChange={handleChange} text={text}></Children>     </div>   ) } export default Parent

        3.變量提升,兄弟組建通信

        function Children(props) {   return (     <div>       <p>Children</p>       <button onClick={() => { props.setText('我是Children發的信息') }}>給Children1發信息</button>     </div>   ) } function Children1(props) {   return (     <div>       <p>Children1</p>       <p>{props.text}</p>     </div>   ) }  function App() {   let [text, setText] = useState('')   return (     <>       <div>APP</div>       <Children setText={setText}></Children>       <Children1 text={text}></Children1>     </>   ) } export default App

        4.Context,跨組建通信

        舊寫法

        class Children extends React.Component {   static contextTypes = {     text: PropsType.string   }   render() {     return (       <div>         <p>Children</p>         <p>{this.context.text}</p>       </div>     )   } }  class Parent extends React.Component {   static childContextTypes = {     text: PropsType.string   }   getChildContext() {     return {       text: '我是爸爸的信息'     }   }   render() {     return (         <div>           <p>Parent</p>           <Children></Children>         </div>     )   } } export default Parent

        新寫法

        const { Consumer, Provider } = React.createContext()  class Children extends React.Component {   render() {     return (       <Consumer>         {           (value) => (             <div>               <p>Children1</p>               <p>{value.text}</p>             </div>           )         }       </Consumer>     )   } }  class Parent extends React.Component {   render() {     return (       <Provider value={{ text: '我是context' }}>         <div>           <p>Parent</p>           <Children1></Children1>         </div>       </Provider>     )   } }  export default Parent

        5.node的events模塊的單例通信

        function Children(props) {   return (     <div>       <p>Children</p>       <p>{props.text}</p>       <button onClick={() => { props.event.emit('foo') }}>點擊我改變爸爸傳給我的東西</button>     </div>   ) }  function Parent() {   let [text, setText] = useState('這是爸爸傳給你的東西')   let event = new Events()   event.on('foo', () => { setText('改變了') })   return (     <div>       <p>Parent</p>       <Children event={event} text={text}></Children>     </div>   ) } export default Parent

        注意⚠️:這種通信記住在頂部引入events模塊,無需安裝,node自身模塊。

        6.redux共享數據通信

        store.js

        import { createStore } from 'redux'  let defaultState = {     text: '我是store' }  let reducer = (state = defaultState, action) => {     switch (action) {         default: return state     } }  export default createStore(reducer)

        child.js

        import React from 'react'  import { connect } from 'react-redux'  class Child extends React.Component {     render() {         return (             <div>Child<p>{this.props.text}</p></div>         )     } }  let mapStataToProps = (state) => {     return {         text: state.text     } }  export default connect(mapStataToProps, null)(Child)

        Parent.js

        class Parent extends React.Component {   render() {     return (       <Provider store={store}>         <div>           <p>Parent</p>           <Child></Child>         </div>       </Provider>     )   } }  export default Parent

        注意:記得安裝reduxreact-redux

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品人妻码一区二区三区| 久久精品国产亚洲沈樵| 国产成人精品日本亚洲网址 | 国内精品久久久久影院一蜜桃| 久久国产午夜精品一区二区三区| 国产一精品一av一免费爽爽| 无码精品人妻一区二区三区免费看| 国产精品午夜久久| www.日韩精品| 亚洲精品高清视频| 老司机69精品成免费视频| 国产精品视频一区二区三区无码| 亚洲AV日韩精品久久久久| 无码乱码观看精品久久| 精品久久久久久久久久中文字幕 | 亚洲国产精品无码久久久蜜芽| 久久久久久亚洲精品不卡 | 精品久久久噜噜噜久久久| 亚洲国产精品国自产拍AV| 老司机精品影院91| 久久久久久青草大香综合精品| 国产精品自在线拍国产电影 | 久久国产精品99精品国产987| 99精品国产自在现线观看| 黑人巨大精品欧美| 精品久久久久久亚洲精品 | 亚洲精品成人片在线观看| 久草热久草热线频97精品| 国产精品亚洲专区无码WEB| 国产精品午夜国产小视频| 国产精品你懂的在线播放| 国产精品偷伦视频免费观看了 | 成人免费精品网站在线观看影片| 亚洲国产精品不卡在线电影| 最新亚洲精品国自产在线观看| 91大神精品全国在线观看| 国产精品成人精品久久久| 久久se精品一区精品二区国产| 久久久无码精品亚洲日韩软件| 无码精品人妻一区二区三区影院| 亚洲日韩欧美制服精品二区|