내가 가져 오는 내용이 업데이트되도록 쿼리를 변경하려고했지만 테스트를 위해 거기에 넣은 업데이트 만 있습니다. 정말 도움을 주시면 감사하겠습니다. 그리고이 클래스 메서드를 사용하거나 후크를 사용하여 배우는 것이 더 낫습니까? 인터넷 검색을 할 때부터 해결책을 찾았지만 후크를 사용했습니다.
class App extends Component {
constructor() {
super();
this.state = {
search: '',
photos: [],
query: 'space'
}
this.handleClick = this.handleClick.bind(this)
}
async componentDidMount() {
const {query} = this.state
try{
const responseSearch = await client.photos.search({query, per_page: 20 });
const dataSearch = await responseSearch.photos;
console.log(responseSearch)
this.setState({photos: dataSearch})
if (responseSearch.ok) {
throw Error(responseSearch.statusText);
}
}catch (error) {
console.log(error);
}
}
handleClick(){
this.setState({query: 'nature'})
}
render() {
const {photos, search, query} = this.state;
const filteredImages = photos.filter( card =>
card.photographer.toLowerCase().includes(search.toLowerCase() )
)
return (
<div className="App">
<Particles className ='particles'
params={particlesOptions}
/>
<h2>{query}</h2>
<button onClick={this.handleClick}>change</button>
<Nav
categories={categories}
/>
<SearchBox
placeholder='search cards'
handleChange={e => this.setState({query: e.target.value})}
/>
<CardGroup cards={filteredImages} />
</div>
);
}
}
- 답변 # 1
- 답변 # 2
수명주기 메서드에 넣으면 가져 오기가 업데이트되지 않습니다.
componentDidMount
. 가져 오기를 렌더에 넣는 것은 좋지 않습니다. 나중에 가져 오기 메서드를 트리거하는 것이 좋습니다.setState
수행.handleClick(){ this.setState({query: 'nature'},this.fetchAgain) } fetchAgain(){ const {query} = this.state try{ const responseSearch = await client.photos.search({query, per_page: 20 }); const dataSearch = await responseSearch.photos; console.log(responseSearch) this.setState({photos: dataSearch}) if (responseSearch.ok) { throw Error(responseSearch.statusText); } }catch (error) { console.log(error); } }
- 답변 # 3
데이터를 가져 오는 방법을 만들 것입니다.
fetchData
, 그런 다음 해당 메서드를componentDidMount
쿼리 변경 및 호출을 처리하는 다른 메서드를 만들 것입니다.fetchData
상태 업데이트 후componentDidMount() { this.fetchData(); } fetchData = () => { ... //fetch code } changeQuery = (query) => { this.setState({query : query} , this.fetchData); } render() { ... <SearchBox placeholder='search cards' handleChange={e => this.changeQuery(e.target.value)} /> ... }
가져 오는 동안 입력을 비활성화하고 싶습니다.
관련 자료
- reactjs - 데이터를 가져올 때와 상태를 업데이트 할 때
- javascript - 업데이트 쿼리의 키 내에서 변수를 사용하는 방법
- reactjs - React에서 초기 가져 오기 결과에 따라 데이터 가져 오기
- javascript - 체크 박스의 상태 지연 업데이트, React
- javascript - API에서 데이터를 가져 오는 React에서 정의되지 않은 속성을 읽을 수 없음 오류가 발생합니다
- javascript - Webpack을 사용하여 React에서 Unknown 브라우저 쿼리를 수정하려면 어떻게해야합니까?
- python - Mysql-connector 쿼리가 값을 업데이트하지 않음
- javascript - Fetch API React로 렌더링시 JSX로 API 정보 표시
- javascript - 비동기 가져 오기 React에서 값을 가져올 수 없습니다
- reactjs - React Native에서 플랫리스트의 매개 변수 업데이트
- php - 가져 오기 쿼리 내 ID에서 사용자 이름 가져 오기
- javascript - React useEffect는 함수 변수를 업데이트 할 수 없습니다
- javascript - JSON 데이터로 업데이트 상태 변수 반응
- reactjs - axiosget 메서드를 사용하여 react에서 상태를 업데이트하려면 어떻게해야합니까?
- FoxPro 데이터베이스를 사용하여 하나의 쿼리에서 동일한 열의 여러 행을 업데이트하는 방법은 무엇입니까?
- sql : 긴 쿼리의 일부인 경우 업데이트가 작동하지 않습니다.
- reactjs - 네이티브 반응 - 소비자의 컨텍스트 업데이트는 처음에만 작동합니다
- javascript - 반응 js는 파일 업로드를 사용하여 API를 본문으로 보내지 않습니다
- 값 중첩 매개 변수를 기반으로 결과를 가져 오기 위해 mongodb를 쿼리하는 방법은 무엇입니까?
다음과 같은 다른 수명주기 방법을 사용할 수 있습니다.
componentDidUpdate
언제든 호출됩니다.props
또는state
(컴포넌트가 렌더링 될 때 처음에 호출되지 않으므로 여전히 사용해야합니다.componentDidMount
).그런 다음 별도의 메서드로 API 호출을 이동할 수 있습니다.
fetchData
) 두 가지 모두에서 재사용componentDidMount
만큼 잘componentDidUpdate
따라서 코드는 다음과 같습니다.