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

        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號
        主站蜘蛛池模板: 无码人妻一区二区三区精品视频| 尤物国精品午夜福利视频| 久草热久草热线频97精品| 国产精品综合色区在线观看| 久久九九久精品国产| 亚洲第一精品在线视频| 精品久久久久久久久午夜福利| 午夜三级国产精品理论三级 | 精品麻豆丝袜高跟鞋AV| 日本精品一区二区久久久| 国产三级精品三级在线观看专1| 国产亚洲精品一品区99热| 国内精品九九久久久精品| 无码囯产精品一区二区免费| 亚洲精品国产精品乱码不卡| 久久久精品久久久久久 | 久久这里只有精品18| 午夜福利麻豆国产精品| 国产亚洲精品自在线观看| 亚洲国产精品婷婷久久| 国产精品亚洲专区在线观看| 国产午夜无码精品免费看| 无码精品黑人一区二区三区| 亚洲精品午夜国产VA久久成人| 婷婷久久精品国产| 人妻一区二区三区无码精品一区| 国产精品va在线观看无码| 97国产视频精品| 最新国产の精品合集| 2024最新国产精品一区| 日韩精品在线观看视频| 欧美精品888| 亚洲欧美日韩精品永久在线| 欧美精品免费线视频观看视频| 欧美一区二区精品| 99久久免费国产精品| 国产2021久久精品| 国产精品v欧美精品v日韩| 国模精品一区二区三区| 蜜臀AV无码国产精品色午夜麻豆| 久久亚洲精品无码播放|