如何解决ReactJS TypeError:从URL读取参数时无法读取未定义的属性'props'
我有两页,一页用于搜索,一页用于结果。在搜索页面中,提交包含搜索项的表单,然后将其传递到URL中。在结果页中,我尝试读取该参数并将其作为变量传递给我在那里的函数,但是我不断收到以下错误:
class Search extends Component {
constructor(props){
super(props)
this.state = {
search: ''
}
}
handleSubmit = (event) => {
event.preventDefault()
const data = this.state
this.props.history.push('/search/' + data.search);
}
handleInputChange = (event) => {
event.preventDefault()
this.setState({
[event.target.name]: event.target.value
})
}
render(){
const {search} = this.state
return (
<div>
<p>What are you searching for?</p>
<form onSubmit={this.handleSubmit}>
<p><input type="text" placeholder="Search" name="search" onChange={this.handleInputChange}></input></p>
<p><button>Search!</button></p>
</form>
</div>
)
}
}
function Result() {
const ListLoading = withListLoading(List);
const [appState,setAppState] = useState({
loading: false,products: null,});
useEffect(() => {
setAppState({ loading: true });
const baseUrl = "http://localhost:8080/"
const searchItem = this.props.params.search
let urls = [];
const allUrls = shops.map((shop) => {
let url = baseUrl + searchItem;
urls.push(url)
});
function fetchData() {
const allRequests = urls.map(url =>
fetch(url).then(response => response.json())
);
return Promise.all(allRequests);
};
fetchData().then(arrayOfResponses =>
setAppState({loading: false,products: arrayOfResponses}),);
},[setAppState]);
return (
<div className='App'>
<div className='container'>
<h1>Products</h1>
</div>
<div className='repo-container'>
<ListLoading isLoading={appState.loading} products={appState.products} />
</div>
<footer>
</footer>
</div>
);
}
export default Result;
const searchItem = this.props.params.search
该函数将调用我在本地主机上运行的另一个应用程序。
我设置了变量display: grid;
,但这似乎不起作用。
我还能如何从URL中读取参数并将其设置为变量?
解决方法
function Result (props) {
// do stuff with props,not this.props
}
可能是一个问题的另一个观察结果:
将onSubmit={this.handleSubmit}
更改为onSubmit={e => this.handleSubmit(e)}
问题是,当您在对象上调用方法时,作用域(在函数内部时“ this”表示的范围)设置为在其上调用方法的对象。因此,当您这样做时:
this.handleSubmit()
…在handleSubmit函数“这个”内部(仍然)是您的组件。
但是,如果您将其分离并作为常规函数自行调用:
const fn = this.handleSubmit;
fn() // “this” isn’t set; it’s undefined inside the function
范围丢失。因此,当您尝试执行this.props
时,它会爆炸,因为“ this”是未定义的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。