[英]How can I convert stateless function to class component in react native
[英]How can I use onClick on stateless component in React?
我想在无状态组件上使用 onClick 但它拒绝这样的错误: onClick
侦听器是一个函数,而不是获得了object
类型的值。
我需要在单击时显示和隐藏组件。 例如,当我单击<ResultCard/>
组件时,我想隐藏他并显示<ResultDetail/>
状态反应组件:
import React, { Component } from "react";
import ResultCard from "./ResultCard";
import "../../assets/css/Result.css";
import Spinner from "../Spinner";
import { getApiToken, getParisByPrice } from "../../services/api";
import Modal from "../Modal";
import "../../assets/css/BudgetEntry.css";
import modify from "../../assets/images/modify.png";
import ResultDetail from "./ResultDetail";
class Results extends Component {
state = {
priceValue: "",
showResult: true
};
showResultDetail = () => {
this.setState({ showResult: false });
};
closeResultDetails = () => {
this.setState({ showResult: true });
};
render() {
return (
<div className="results-container">
{this.state.loading ? (
<Spinner />
) : (
<div className={"row"}>
{this.state.showResult ?
(
this.state.paris.map(details => (
<ResultCard
key={details.id}
id={details.id}
showResultDetail={this.showResultDetail}
prefix={details.prefix}
costPerDay={details.average_cost_per_day}
logoSports={details.infrastructure.map(home =>
home.logo_path.map(path_image => (
<img
src={path_image}
alt="icon-sports"
style={{ width: 20 }}
key={path_image}
/>
))
)}
/>
))
)
:
(
<ResultDetail closeResultDetail={this.closeResultDetails}/>
)
}
</div>
)}
</div>
);
}
}
export default Results;
ResultCard(无状态组件):
import React from 'react';
import '../../assets/css/ResultCard.css';
const ResultCard = ({prefix, costPerDay, logoSports, showResultDetail, id}) => {
return (
<div className="card" onClick={showResultDetail} id={id}>
<p style={{margin:5}}>{prefix}</p>
<p style={{margin:1}}>arrondissement</p>
<p>{costPerDay} $</p>
{logoSports}
</div>
)
};
export default ResultCard;
ResultDetail(无状态组件):
import React from 'react';
const ResultDetail = (closeResultDetail) => (
<div onClick={closeResultDetail}>
<p>Result detail</p>
</div>
)
export default ResultDetail;
感谢您的帮助
问题在这里
const ResultDetail = (closeResultDetail) => (
您需要像这样从props
对象中解构它:
const ResultDetail = ({closeResultDetail}) => (
或者像这样直接从 props 使用它:
const ResultDetail = (props) => (
<div onClick={props.closeResultDetail}>
...
在您定义的Results
showResultDetail = () => {
this.setState( {showResult: false });
};
作为没有参数的函数。 然后你通过
showResultDetail={(e) => this.showResultDetail(e)}
作为一个带有事件参数的函数给你的ResultCard
。 如果你把它改成
showResultDetail={this.showResultDetail}
您的问题可能已经解决。
编辑:我认为这是一个最小的片段,可以满足您的要求。
const ResultCard = ({showResultDetail, show}) => { return <div className="card" onClick={showResultDetail}>{show?'Click me!':''}</div> }; class Results extends React.Component { state = { priceValue: "", showResult: true }; showResultDetail = () => { this.setState({ showResult: false }); }; render() { return <ResultCard show={this.state.showResult} showResultDetail={this.showResultDetail}/> } } ReactDOM.render(<Results/>, document.getElementById('root'))
.card { width: 200px; height: 50px; background: lightgray; text-align: center; line-height: 50px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js"></script> <div id='root'></div>
在您的状态组件中
showResultDetail = () => {
this.setState({ showResult: false });
};
render() {
....
<ResultCard
....
show={this.state.showResult}
//defer the execution of the method
onClick={(e) => this.showResultDetail(e)}/>
}
结果卡片.js
const ResultCard = ({prefix, costPerDay, logoSports, showResultDetail, id, show}) => {
if(show)
return (
<div className="card" onClick={showResultDetail} id={id}>
<p style={{margin:5}}>{prefix}</p>
<p style={{margin:1}}>arrondissement</p>
<p>{costPerDay} $</p>
{logoSports}
</div>
);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.