Я использую Tab от SUIR
Я пытаюсь передать некоторые данные состояния в одну из «панелей» и использовать модуль <Dropdown>
для рендеринга этих данных состояния. Нужно ли передавать через реквизит или что-то еще?
Я хочу сделать выпадающий список, специфичный для Tab 2
. Мне просто интересно, как передать данные состояния в метод рендеринга панелей. Я подумал, может быть, переместить метод рендеринга из panes = [{},{},{}]
и поместить его в render()
из App
. Я не уверен, что лучший подход здесь.
Codesandbox кода ниже.
const panes = [
{ menuItem: "Tab 1", render: () => <Tab.Pane>Tab 1 Content</Tab.Pane> },
{ menuItem: "Tab 2", render: () => <Tab.Pane>Tab 2 Content</Tab.Pane> },
{ menuItem: "Tab 3", render: () => <Tab.Pane>Tab 3 Content</Tab.Pane> }
];
const MockAdapter = require("axios-mock-adapter");
const mock = new MockAdapter(axios);
mock.onGet("/dataschemas").reply(200, {
data: [
{
id: "2",
selfUri: "/dataschemas/2",
type: "DataSchema",
name: "Book Catalog"
},
{
id: "3",
selfUri: "/dataschemas/3",
type: "DataSchema",
name: "Business Articles"
}
]
});
class App extends Component {
constructor(props) {
super(props);
this.state = { activeIndex: 1, dataschemas: [], dataSchemaName: "" };
}
handleRangeChange = e => this.setState({ activeIndex: e.target.value });
handleTabChange = (e, { activeIndex }) => this.setState({ activeIndex });
async componentDidMount() {
await this.getSchemas();
}
getSchemas = async () => {
try {
const { data } = await axios.get("/dataschemas");
console.log(data);
const dataschemas = data.data;
this.setState({ dataschemas: dataschemas });
console.log("This is the dataschema list:", dataschemas);
} catch (error) {
console.error(Error(`Error fetching results list: ${error.message}`));
}
};
handleSchemaChange = e => {
//handle data schema dropdown change
};
// Example of dropdown using dataschemas state
render() {
const { activeIndex, dataschemas, dataSchemaName } = this.state;
return (
<div>
<div>activeIndex: {activeIndex}</div>
<input
type="range"
max="2"
value={activeIndex}
onChange={this.handleRangeChange}
/>
<Tab
panes={panes}
activeIndex={activeIndex}
onTabChange={this.handleTabChange}
/>
<Dropdown
placeholder="Select data schema"
scrolling
clearable
fluid
selection
search
noResultsMessage="Try a different Search"
multiple={false}
options={dataschemas.map(schema => {
return {
key: schema.id,
text: schema.name,
value: schema.name
};
})}
header="PLEASE SELECT A DATASCHEMA"
value={dataSchemaName}
onChange={this.handleSchemaChange}
required
/>
</div>
);
}
}