ReactJs。如何在正确的位置获得所需的组件?

时间:2017-07-17 09:04:39

标签: javascript reactjs ecmascript-6 jsx

我有问题。我迷失在reactJs的深林里。我是新来的。 我有8个组件,我需要通过点击短名称按钮获得。 有什么步骤。 我从第一个过滤器中选择了我需要的东西,我得到了short_names和没有数据的所有组件。  我不想获得所有组件,我只需要通过点击一个简短名称获得一个组件。

Screenshot here

以下是呈现页面的代码:

import React, { Component } from 'react';
import { Link } from 'react-router';
import { getAll, getAllRates } from '../actions';
import { MODULE_NAME } from './index';
import { PanelHeader, PanelFooter, LocalFilter } from 'Components';
import locales from 'Shared/locales';
import search from 'Shared/search';
import sortBy from 'Shared/sortBy';
import { AvsProviders, FakProviders, LaaProviders, Laac1Providers,
         Laac2Providers, Laac3Providers, MpgProviders, Mpg2Providers } from '../ComponentsProviders';


export default class ListsAccounting extends Component {
  state = {
    data: [],
    le_id: null,
    year: new Date().getFullYear(),
    totalPages: 0,
    searchString: '',
    limit: '50',
    page: 1,
  };

  search = search(this);
  sortBy = sortBy(this);

  loadData = (params) => {
    const { searchString } = this.state;
    const q = searchString === '' ? null : searchString;
    getAll({ leId: this.state.le_id, name: MODULE_NAME, params: { q, year: this.state.year, ...params } })
      .then(success => this.setState({
        data: success.data,
        totalPages: success.totalPages,
        page: success.page,
        limit: String(success.limit || ''),
      }));
  };

  constructor() {
    super();
    this.onClick = this.handleClick.bind(this);
  }

  handleClick(event) {
    const { id } = event.target;
    console.log(id);
  }


  getData = (leId, id, type, year) => {
    getAllRates({ leId, id, type, year, name: MODULE_NAME })
      .then(() => this.loadData());
  };

  changeState = state => this.setState(state, () => this.loadData());
  render() {
    const { limit, totalPages, data } = this.state;
    console.log(this);
    return (
      <div className="container">
        <div className="row">
        <div className="col-xs-12 col-sm-12 col-md-6">
          <div className="panel panel-adminme table-dynamic">
            <PanelHeader
              name="insurances"
              currentState={{
                state: this.state,
                loadData: this.loadData,
              }}
            />
            <div className="table-filters">
              <div className="row no-x-margin">
                <div className="col-sm-4 col-xs-6">
                  <LocalFilter
                    name="all-providers-leg-entities"
                    placeholder="le_id"
                    option="le_id"
                    value={this.state.le_id}
                    changeState={this.changeState}
                  />
                </div>
                <div className="col-md-3 col-sm-4 col-xs-6">
                  <LocalFilter
                    name="insurance-years"
                    placeholder="year"
                    option="year"
                    value={this.state.year}
                    changeState={this.changeState}
                  />
                </div>
              </div>
            </div>
            <div className="table-responsive">
              <table className="table table-bordered table-striped table-hover">
                <thead>
                 <tr className="text-center">
                   <th>
                     NAME
                   </th>
                   <th>
                     SHORT_NAME
                   </th>
                   <th>
                     ACTION
                   </th>
                 </tr>
                </thead>
                <tbody>
                {
                  !data.length &&
                  <tr>
                    <td colSpan="3" className="text-center">
                      {locales('no_rows')}
                    </td>
                  </tr>
                }
                {
                  data.map((row, index) => (
                  <tr key={`${MODULE_NAME}-${index}`}>
                    <td>
                      <h5>{row.type}</h5>
                    </td>
                    <td>
                      {
                        row.text.map((name, indexText) => (
                        <span key={name} className="margin-right-10">
                          <Link
                            key={row.type}
                            role="button"
                            onClick={ () => this.getData(
                              this.state.le_id,
                              row.text_id[indexText],
                              row.type,
                              row.year,
                              )}
                          >
                           {name}
                          </Link>
                        </span >
                      ))
                     }
                   </td>
                    <td className="btn btn-info">
                      ADD
                    </td>
                  </tr>
                 ))
                }
                </tbody>
              </table>
            </div>
            <PanelFooter
              limit={limit}
              totalPages={totalPages}
              loadData={this.loadData}
            />
          </div>
         </div>
          <div className="col-xs-12 col-sm-12 col-md-6">
            { data.type === data.type && data.text_id === data.text_id &&
              data.map((row) => {
                console.log(row.type);
                switch (row.type) {
                  case 'AVS':
                    return (
                       <AvsProviders/>
                    );
                  case 'FAK' :
                    return (
                       <FakProviders/>
                    );
                  case 'LAA':
                    return (
                        <LaaProviders/>
                    );
                  case 'LAAC1':
                    return (
                        <Laac1Providers/>
                    );
                  case 'LAAC2':
                    return (
                        <Laac2Providers/>
                    );
                  case 'LAAC3':
                    return (
                        <Laac3Providers/>
                    );
                  case 'MPG':
                    return (
                       <MpgProviders/>
                    );
                  case 'MPG2':
                    return (
                        <Mpg2Providers/>
                    );
                  default:
                    return null;
                }
              })
            }
          </div>
        </div>
      </div>
    );
  }
}

以下是渲染组件的第1页:

import React, { Component } from 'react';
import { getAllRates } from '../../actions';
import { PanelHeader } from 'Components';

const MODULE_NAME = 'FAK';

export default class FakProviders extends Component {
  state = {
    data: [],
    le_id: null,
    year: new Date().getFullYear(),
    totalPages: 0,
    searchString: '',
    limit: '50',
    page: 1,
  };

  componentDidMount() {
    this.loadData();
  }

  loadData = (params) => {
    const { searchString } = this.state;
    const q = searchString === '' ? null : searchString;
    getAllRates({ leId: this.props.params.le_id,
      id: this.props.params.text_id,
      name: MODULE_NAME,
      params: { q, ...params } })
    .then(success => this.setState({
      data: success.data,
      totalPages: success.totalPages,
      page: success.page,
      limit: String(success.limit || ''),
    }));
  };

  changeState = state => this.setState(state, () => this.loadData());
  render() {
    const { data } = this.state;
    return (
      <div className="panel panel-adminme table-dynamic">
        <PanelHeader
          name="insurances"
          currentState={{
            search: this.search,
            state: this.state,
            loadData: this.loadData,
          }}
        />
        <div className="table-responsive">
          <table className="table table-bordered table-striped table-hover">
            <thead>
            <tr>
              <th>
                <h4>{data.fak_short_name}</h4>
              </th>
              <th>
                <h4>{data.year}</h4>
              </th>
            </tr>
            </thead>
            <tbody>
            <tr>
              <th>
                <h4>fak_rate_ee</h4>
              </th>
              <th>
                <h4>
                  {data.fak_rate_ee}
                </h4>
              </th>
            </tr>
            <tr>
              <th>
                <h4>fak_rate_er</h4>
              </th>
              <th>
                <h4>
                  {data.fak_rate_er}
                </h4>
              </th>
            </tr>
            </tbody>
          </table>
        </div>
        <div className="panel-footer" />
      </div>
    );
  }
}

0 个答案:

没有答案