Я только начинаю с добавления некоторого React в мой интерфейс Ruby on Rails.
У меня есть две модели данных, называемые coffee_beans
и countries
.
Я хочу добавить выпадающий список в форму для coffee_beans
, который тянет в стране, как поля id
, так и country_name
. Мне нужно отправить идентификатор в таблицу coffee_beans
.
Я могу нормально получать данные через axios, но я изо всех сил стараюсь, чтобы данные отображались в моем раскрывающемся списке.
Я использую React-Select.
import React from 'react';
import axios from 'axios';
import Select from 'react-select';
class Country extends React.Component {
constructor() {
super();
}
componentDidMount() {
axios.get(`/countries.json`)
.then(res => {
const countries = res.data;
this.setState({ countries });
})
}
render() {
let optionItems = countries.map(countries =>
<option key={countries.id}>{countries.country_name}</option>
);
return (
<div className="">
<label htmlFor="coffee_beans_countries">Country</label>
<Select id="country" name="coffee_beans[countries]" options={optionItems} />
</div>
)
}
}
export default Country
представленный элемент
import React from 'react'
import ReactDOM from 'react-dom'
import Country from 'Country'
document.addEventListener('turbolinks:load', function() {
var element = document.getElementById("country-component");
ReactDOM.render(<Country />, element);
});
Update
Теперь у меня есть код ниже, но я получаю сообщение об ошибке:
warning.js: 33 Предупреждение: можно обновить только смонтированный или монтированный
составная часть. Обычно это означает, что вы вызвали setState, replaceState или
forceUpdate для неустановленного компонента. Это неоперация.
import React from 'react';
import axios from 'axios';
import Select from 'react-select';
class Country extends React.Component {
state = {
countries: []
}
componentDidMount() {
axios.get(`/countries.json`)
.then(res => {
const countries = [];
this.setState({ countries });
});
console.log(countries)
}
render() {
let optionItems = this.state.countries.map(countries =>
<option key={countries.id}>{countries.country_name}</option>
);
return (
<div className="">
<label htmlFor="coffee_beans_countries">Country</label>
<Select id="country" name="coffee_beans[countries]" options={optionItems} />
</div>
)
}
}
export default Country