Реагировать на вызов покоя после нажатия кнопки по значению текстового поля и показывать в таблице - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть две конечные точки http://localhost:8080/persons, чтобы получить всех людей и http://localhost:8080/persons/id, чтобы получить людей по id.Мне нужно создать страницу React с текстовым полем и кнопкой для поиска по идентификатору или всем, если текстовое поле пустое, и показать результаты в виде таблицы.Я очень новичок в React, и у меня есть следующий код, но он не работает, и я не уверен, почему, не могли бы вы мне помочь?

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width-device-width, initial-scale-1">
    <script src="http://www.jimsproch.com/react/future/react.js"></script>
    <script src="http://www.jimsproch.com/react/future/react-dom.js"></script>
    <script src="http://www.jimsproch.com/react/babel-browser.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.16.2/axios.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.css">
</head>
<body>
<div id="root"></div>
<script type="text/babel">
    class TableExp extends React.Component {
        constructor () {
            super();

            this.state = {
                tableData: [{
                    id: '',
                    name: '',
                }],
                personId: '',
            };
        }

        handleChange = event => {
          this.setState({ personId: event.target.value });
        }

        handleSubmit = event => {
          event.preventDefault();

            axios.get(`http://localhost:8080/persons/${this.state.personId}`, {
                responseType: 'json'
            }).then(response => {
                this.setState({ tableData: response.data });
            });
        }

        render () {
            const { tableData } = this.state.tableData;

            return (
              <div>
                <form onSubmit={this.handleSubmit}>
                  <label>
                    Person ID:
                    <input type="text" name="id" onChange={this.handleChange} />
                  </label>
                  <button type="submit">Search</button>
                </form>
                <ReactTable.default
                      data={tableData}
                      columns={[
                          {
                              Header: 'Person',
                              columns: [
                                  {
                                      Header: 'ID',
                                      accessor: 'id',
                                  },
                                  {
                                      Header: 'Name',
                                      accessor: 'name',
                                  },
                              ],
                          },
                      ]}
                      defaultPageSize={10}
                      className="-striped -highlight"
                  />
                </div>
            );
        }
    };
    ReactDOM.render(<div><TableExp/></div>, document.getElementById("root"));
</script>
</body>
</html>

Редактировать: Сначала я показывал всем людям так же скоро, как и мнеоткройте страницу и все заработало:

class TableExp extends React.Component {
        constructor () {
            super();
            this.state = {
                tableData: [{
                    id: '',
                    name: '',
                }],
            };
        }
        componentDidMount () {
            axios.get('http://localhost:8080/persons', {
                responseType: 'json'
            }).then(response => {
                this.setState({ tableData: response.data });
            });
        }
        render () {
            const { tableData } = this.state;
            return (<ReactTable.default
                            data={tableData}
                            columns={[
                                {
                                    Header: 'Person',
                                    columns: [
                                        {
                                            Header: 'ID',
                                            accessor: 'id',
                                        },
                                        {
                                            Header: 'Name',
                                            accessor: 'name',
                                        },
                                    ],
                                },
                            ]}
                            defaultPageSize={10}
                            className="-striped -highlight"
                    />
            );
        }
    };
    ReactDOM.render(<div><TableExp/></div>, document.getElementById("root"));class TableExp extends React.Component {
        constructor () {
            super();
            this.state = {
                tableData: [{
                    id: '',
                    name: '',
                }],
            };
        }
        componentDidMount () {
            axios.get('http://localhost:8080/persons', {
                responseType: 'json'
            }).then(response => {
                this.setState({ tableData: response.data });
            });
        }
        render () {
            const { tableData } = this.state;
            return (<ReactTable.default
                            data={tableData}
                            columns={[
                                {
                                    Header: 'Person',
                                    columns: [
                                        {
                                            Header: 'ID',
                                            accessor: 'id',
                                        },
                                        {
                                            Header: 'Name',
                                            accessor: 'name',
                                        },
                                    ],
                                },
                            ]}
                            defaultPageSize={10}
                            className="-striped -highlight"
                    />
            );
        }
    };
    ReactDOM.render(<div><TableExp/></div>, document.getElementById("root"));

API в Spring Boot:

@RestController
@EnableAutoConfiguration
@ComponentScan("repository,factory")
@SpringBootApplication
public class PersonController {

    private PersonRepository PersonRepository;

    @Autowired
    public PersonController(PersonRepository PersonRepository) {
        this.PersonRepository = PersonRepository;
    }

    @CrossOrigin
    @RequestMapping("/persons")
    @ResponseBody
    public List<Person> getPersons() {
        return PersonRepository.getPersons();
    }

    @CrossOrigin
    @RequestMapping("/persons/{id}")
    @ResponseBody
    public List<Person> getPerson(@PathVariable("id") Integer id) {
        return PersonRepository.getPerson(id);
    }

    public static void main(String[] args) {
        SpringApplication.run(PersonController.class, args);
    }
}

1 Ответ

0 голосов
/ 23 сентября 2018

Как уже говорилось, вы используете кавычки для литерала шаблона.Также вы можете объяснить, что именно не работает?любые ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...