#reactjs #semantic-ui
#reactjs #semantic-ui
Вопрос:
Я создаю простое приложение для поиска giphy с помощью react. Похоже, что все классы в semantic-ui работают, за исключением grid-системы, в частности, создавая столбцы из gif-файлов, которые извлекаются при поиске, все они просто выстраиваются вертикально. Я не в первый раз сталкиваюсь с этой проблемой, и я надеюсь, что кто-нибудь из вас сможет выяснить, что я делаю неправильно, я не хочу снова решать это с помощью bootstrap, лол.
Я загрузил и импортировал semantic-ui-react в свои проекты react, и этот синтаксис, похоже, тоже не работает.
import React, { Component } from 'react';
import axios from 'axios';
import './App.css';
const SearchBar = (props) => {
return (
<div className="ui input">
<input
value={props.value}
placeholder="Find the gif of your dreams!"
type="text"
onChange={e => props.onSearchInput(e.target.value)}
/>
</div>
);
}
const DisplayGifs = (props) => {
const gifs = props.data.map(gif => {
return (
<div className="column">
<div class="ui card" key={gif.id}>
<div class="image">
<img src={gif.images.fixed_width_downsampled.url} alt={gif.id} />
</div>
</div>
</div>
);
})
return (
<div>{gifs}</div>
);
}
class App extends Component {
state = { searchTerm: '', gifs: [] }
onSearchInput = (term) => {
this.setState({ searchTerm: term })
}
onHandleSubmit = async (e) => {
e.preventDefault();
const gifs = await axios.get('http://api.giphy.com/v1/gifs/search?q=' this.state.searchTerm 'amp;api_key=MRLay8p2J7b0XwOwbZOJVCau52Fn4B6Ramp;limit=8')
this.setState({ searchTerm: '', gifs: gifs.data.data })
}
render() {
console.log(this.state.gifs)
return (
<div className="ui container">
<h1>Gify Search API</h1>
<div className="ui segment">
<form onSubmit={this.onHandleSubmit}>
<SearchBar
value={this.state.searchTerm}
onSearchInput={this.onSearchInput}
/>
</form>
</div>
<div className="ui three column grid">
<DisplayGifs
data={this.state.gifs}
/>
</div>
</div>
);
};
};
export default App;
Ответ №1:
В вашем компоненте приложения, куда вы возвращаетесь <DisplayGifs>
, он обернут вашим grid div <div className="ui three column grid">
. Однако в вашем <DisplayGifs>
компоненте вы возвращаете <div>{gifs}</div>
, поэтому при рендеринге ваш html :
<div className="ui three column grid">
<div>
<div className="column">...</div>
<div className="column">...</div>
<div className="column">...</div>
...etc
</div>
</div>
чтобы исправить это в вашем <DisplayGifs>
компоненте, выполните:
return gifs
Вместо
return (
<div>{gifs}</div>
);
таким образом, ваш отрисованный HTML-код будет выглядеть следующим образом :
<div className="ui three column grid">
<div className="column">...</div>
<div className="column">...</div>
<div className="column">...</div>
...etc
</div>
Возвращаясь <div>{gifs}</div>
, он нарушает структуру, которую ищет semantic ui, которая является прямыми дочерними элементами div с классом grid, имеющим класс column