【发布时间】:2021-03-02 14:48:34
【问题描述】:
我正在尝试制作一个带有反应的票务系统,我想制作一个名为 hide 的按钮,允许用户隐藏当前票务 div,所以基本上我认为为了做到这一点,我需要使用 onClick函数并将div的显示更改为隐藏,问题是我没有正确理解如何使用setState。
(我还有一个正在搜索特定票证的输入)
代码如下:
import React from 'react';
import './App.scss';
import {createApiClient, Ticket} from './api';
export type AppState = {
tickets?: Ticket[],
search: string;
}
const api = createApiClient();
export class App extends React.PureComponent<{}, AppState> {
state: AppState = {
search: ''
}
searchDebounce: any = null;
async componentDidMount() {
this.setState({
tickets: await api.getTickets()
});
}
renderTickets = (tickets: Ticket[]) => {
const Ticket = (props) => {
const [isVisible, setIsVisible] = useState(true);
const toggleVisibility = () => {
setIsVisible(!isVisible);
};
return (
<li key={props.id} className="ticket">
<h6 className="hide" onClick={toggleVisibility}>
Hide
</h6>
<h5 className="title">{props.title}</h5>
<p className="content">{props.content}</p>
<footer>
{ isVisible &&
(<div className="meta-data">
By {props.userEmail} |{" "}
{new Date(props.creationTime).toLocaleString()}
</div>)
}
</footer>
</li>
);
};
}
onSearch = async (val: string, newPage?: number) => {
clearTimeout(this.searchDebounce);
this.searchDebounce = setTimeout(async () => {
this.setState({
search: val
});
}, 300);
}
render() {
const {tickets} = this.state;
return (<main>
<h1>Tickets List</h1>
<header>
<input type="search" placeholder="Search..." onChange={(e) => this.onSearch(e.target.value)}/>
</header>
{tickets ? <div className='results'>Showing {tickets.length} results</div> : null }
{tickets ? this.renderTickets(tickets) : <h2>Loading..</h2>}
</main>)
}
}
export default App;
【问题讨论】:
标签: javascript node.js reactjs styles setstate