独立组件之间使用焊剂反应传递数据

独立组件之间使用焊剂反应传递数据

问题描述:

我试图将数据从一个组件传递到另一个组件。但它没有亲子关系,并且彼此独立。我想用flux而不是redux做它。任何人都可以帮助我做到这一点?以下是我的代码。独立组件之间使用焊剂反应传递数据

export class EmpSearch extends React.Component { 
constructor(props) { 
super(props); 
this.state = { 
    Empnumber: '' 
}; 
} 

updateEmpNumber(e) { 
this.setState({Empnumber: e.target.value}); 
} 

render() { 
    return (
    <div className="row"> 
    <form> 
     <div className="form-group"> 
     <label htmlFor="Empnumber">Emp Number</label> 
     <input type="text" className="form-control" id="Empnumber" placeholder="Emp Number" value={this.state.Empnumber} onChange={this.updateEmpNumber.bind(this)}/> 
     </div> 
    </form> 
    </div> 
); 
} 
} 
export default EmpSearch 

另一个文件是我要发送的EmpNumber低于,

class EmpDetail extends React.Component { 
render() { 
return (
    <div className="container"> 
    <input type="text"/> 
    </div> 
); 
} 
} 

export default EmpDetail; 

假设你已经执行了通量架构您的应用程序。

你的第一部分会是这样的。

import React from 'react'; 
import UserAction from '../../Actions/UserActions'; 

export class EmpSearch extends React.Component { 
constructor(props) { 
super(props); 
this.state = { 
    Empnumber: '' 
}; 
} 

updateEmpNumber(e) { 
this.setState({Empnumber: e.target.value}); 
UserAction.employeeNumb(this.state.Empnumber); 
} 

render() { 
    return (
    <div className="row"> 
    <form> 
     <div className="form-group"> 
     <label htmlFor="Empnumber">Emp Number</label> 
     <input type="text" className="form-control" id="Empnumber" placeholder="Emp Number" value={this.state.Empnumber} onChange={this.updateEmpNumber.bind(this)}/> 
     </div> 
    </form> 
    </div> 
); 
} 
} 
export default EmpSearch 

操作文件看起来像

import {dispatch,register} from '../Dispatcher/Dispatcher'; 

export default { 

     employeeNumb(Data){ 

     dispatch({ actionType:'EMPNO',data:Data}); 
     } 
} 

商店看起来像

import {dispatch,register} from '../Dispatcher/Dispatcher'; 
import AppConstants from '../Constants/AppConstants'; 
import {EventEmitter} from 'events'; 

const CHANGE_EVENT = 'change'; 
var a=0; 

const UserStore = Object.assign(EventEmitter.prototype,{ 
    emitChange(){ 
    this.emit(CHANGE_EVENT) 
    }, 
    addChangeListener(callback){ 
    this.on(CHANGE_EVENT,callback); 
    }, 
    removeChangeListener(callback){ 
    this.removeListener(CHANGE_EVENT,callback) 
    }, 
    setEmpData(data){ 
    a=data; 
    }, 
    getEmpData(){ 
    return a; 
    } 

}); 

    dispatcherIndex:register((action)=>{ 
    switch (action.actionType) { 
     case AppConstants.EMPNO: 
       UserStore.setEmpData(action.data); 
       UserStore.emitChange(); 
       break; 
    } 

    UserStore.emitChange(); 

    }); 


export default UserStore; 

调度文件

import {Dispatcher} from 'flux'; 

const flux = new Dispatcher(); 

export function register(callback){ 
    return flux.register(callback); 
} 

export function dispatch(actionType,action){ 
    flux.dispatch(actionType,action); 
} 

第二个部件文件看起来像

import React from 'react'; 
import Store from '../../Store/UserStore'; 

    class EmpDetail extends React.Component { 

     constructor(props){ 
     super(props); 
     this.state={ 
      empno:'' 
     }; 

     } 

     componentDidMount(){ 
     Store.addChangeListener(this._onChange); 
     } 

     componentWillUnmount =() =>{ 
     Store.removeChangeListener(this._onChange); 
     } 

     _onChange =() =>{ 
     this.setState({empno:Store.getEmpData()}); 
     } 


    render() { 
    return (
     <div className="container"> 
     <input type="text"/> 
     <input type="button" onClick={()=>{console.log(this.state.empno);}}/> 
     </div> 
    ); 
    } 
    } 

    export default EmpDetail; 

什么你已经尝试可能会略有不同,但是这是你在找什么的正常流动。

+0

感谢您的回复..您从哪里领取调度员?这是一堂课吗?或者你已经安装了它?如果是一个班级,你可以在上面添加吗? – user2768132

+0

@ user2768132我更新了我的答案 – TRomesh