如何将组件与其自身的数据提取需求分离

时间:2016-08-20 10:18:19

标签: reactjs redux flux

当一个组件在渲染之前需要获取某组数据时,我通常会沿着这些方向做一些事情:

class Comp extends Component {
  componentWillMount() {
    this.props.requestData() // triggeres in action in the wrapper
  }
  render() {
    const { data } = this.props.
    return (
       <div>
         {/* do something with data */}
       </div>
    )
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Comp)

现在我有两个React SPA,我想在其中使用这个组件。在一个应用程序中,需要在安装组件之前获取所需的数据,而在另一个应用程序中,数据已经存在。 所以我想知道,如果有关于获取数据的问题的最佳实践,这是组件的先决条件。 包装器有没有办法听取Comp的生命周期?我应该只将requestData重命名为onComponentWillMount并听取行动触发吗?

理想情况下,组件不应该关注是否或何时获取。

2 个答案:

答案 0 :(得分:1)

您可以创建一个HoC(高阶组件)来包装您的vanilla onComponentWillMount组件并在onComponentWillReceiveProps(和requestData()上)获取数据。当您使用redux时,我想您的#define FIFO "logFifo" #define MAX_BUF 1024 int main(int argc, char *argv[]){ pid_t pid; pid=fork(); if(pid<0){ printf("error with fork() \n");exit(1); } if(pid == (pid_t) 0){ //FIFO lezen van log_file int err; char buf[MAX_BUF]; char * str_result; FILE *log; err = mkfifo(FIFO, 0666); CHECK_MKFIFO(err); log = fopen(FIFO, "r"); FILE_OPEN_ERROR(log); while(1){ //presult = pthread_mutex_lock( &log_mutex); //pthread_err_handler( presult, "pthread_mutex_lock", __FILE__); str_result = fgets(buf, MAX_BUF,log); if(str_result != NULL){ FILE *fp; fp = fopen("gateway.log","w"); fprintf(fp,"%s \n",buf); //fclose(fp); } //presult = pthread_mutex_unlock( &log_mutex); //pthread_err_handler( presult, "pthread_mutex_unlock", __FILE__ ); sequence++; //usleep(1); } //unlink(FIFO); } else{ //Parent code} return 0;} 回调正在创建一个redux操作,该操作将数据分派到全局存储。或者,如果数据是此组件的本地数据,则可以将其保持在HoC的状态。

答案 1 :(得分:0)

您可以将requestData action creator调用移动到路由定义中的React Router事件&#34; onEnter&#34;。通过这种方式,组件与获取操作创建者分离。