gpt4 book ai didi

javascript - 函数不适用于 React.js 中的 onClick 事件

转载 作者:行者123 更新时间:2023-11-28 17:08:53 25 4
gpt4 key购买 nike

我正在编写一个 React 程序,其中数据将通过 API 获取并显示在表格中。主要有3个文件App.js、Table.js、Search.js和Button.js。正在显示数据,搜索正在工作,但删除按钮不起作用。我已经编写了一个删除按钮的函数,我猜想其中有问题,但不知道是什么。

App.js

import React, { Component } from 'react';
import './App.css';
import Table from './components/Table';
import Search from './components/Search';


//API config
const DEFAULT_QUERY = 'react';
const PATH_BASE = 'https://hn.algolia.com/api/v1';
const PATH_SEARCH = '/search';
const PARAM_SEARCH = 'query=';

const url = `${PATH_BASE}${PATH_SEARCH}?${PARAM_SEARCH}${DEFAULT_QUERY}`;


class App extends Component {
constructor(){
super();
//here searchText is set to DEFAULT_QUERY which will return the result for keyword "redux"
//refer line 8 to change
this.state={
searchText:'',
result:''
}
this.onDismiss=this.onDismiss.bind(this);
this.onSearchChange=this.onSearchChange.bind(this);
this.searchStories=this.searchStories.bind(this);

//this.isSearched=this.isSearched.bind(this);
}

//to add a delete button
onDismiss=(id)=>{
//filter out item array and return results with no matched id
const deleteList=this.state.list.filter(item=>item.objectID!==id);
//setting state of list to lastest deleteList
this.setState({
result:deleteList
})
}
//to add a search bar
onSearchChange=(e)=>{
//set state to value in search bar
this.setState({
[e.target.name]:e.target.value
})
}

searchStories=(result)=>{
this.setState({
result
});
}
//after mounting will fetch the api data
componentDidMount(){
fetch(url)
.then(response => response.json())
.then(result => this.searchStories(result));
}

render() {
const {result,searchText}=this.state;
if(!result){
return null;
}
return(
<div className="page">
<div className="interactions">

<Search
searchText={searchText}
onSearchChange={this.onSearchChange}
>
Search
</Search>
</div>
<Table
list={result.hits}
onDismiss={this.onDismiss}
searchText={searchText}/>

</div>

)

}
}

export default App;

表.js

import React from 'react';
import Button from './Button';

const Table=(props)=>{
const {list,searchText,onDismiss}=props;
return(
<div className="table">

{/*Filter out item title and search title and give away results from item array */}
{list.filter((item)=>{
{/*The includes() method determines whether an array includes a certain value among its entries
, returning true or false as appropriate. */}
return item.title.toLowerCase().includes(searchText.toLowerCase());}).map((item)=>{

return(

<div key={item.objectID} className="table-row">
<span style={{ width: '40%' }}>
<a href={item.url}>{item.title}</a>
</span>
<span style={{ width: '30%' }}>
{item.author}
</span>
<span style={{ width: '10%' }}>
{item.num_comments} comments
</span>
<span style={{ width: '10%' }}>
${item.points} points
</span>
<span style={{ width: '10%' }}>
<Button className="button-inline" onClick={()=>onDismiss(item.objectID)}>delete</Button>
</span>

</div>

)})}
</div>
)

}


export default Table;

按钮.js

import React from 'react';

const Button=(props)=>{

const{onclick,className='',children}=props;
return(
<div>
<button onClick={onclick} className={className} >{children}</button>
</div>
)

}


export default Button;

最佳答案

您的按钮需要稍微修改一下:

<button onClick={onClick} className={className} >{children}</button>

处理程序需要引用传入的 props,其中是 this.props.onClick,而不是 this.props.onclick(您拥有的)。

您遇到的错误可以通过修改 App.js 来修复:

onDismiss = id => {
if (id) {
const deleteList = this.state.list.filter(item => item.objectID !== id);
// setting state of list to lastest deleteList
this.setState({
result:deleteList
})
}
}

关于javascript - 函数不适用于 React.js 中的 onClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55039114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com