简体   繁体   English

onClick 事件绑定(不是按钮)

[英]onClick event binding (not a button)

I have a small React app that makes calls to a JSON file and returns the text of a card.我有一个小型 React 应用程序,它调用 JSON 文件并返回卡片的文本。

I have successfully made this work by calling the onClick on a button, but what I really want to do is add a onClick as an event to my Cards module I've created.我通过在按钮上调用 onClick 成功地完成了这项工作,但我真正想做的是将 onClick 作为事件添加到我创建的卡片模块中。 I've looked at binding at this level but with no success;我已经研究过这个级别的绑定,但没有成功;

<Cards name={card} onClick={() => setCard(Math.floor(Math.random() * 57) + 1)}/>

Do I need to write a custom handler in my cards.js to handle the onClick?我是否需要在我的 cards.js 中编写一个自定义处理程序来处理 onClick? Or can I append it within this file (App.js)?或者我可以在这个文件(App.js)中 append 吗?

The full code is below.完整代码如下。

import React, { useState } from 'react';
import './App.css';
import Cards from '../cards';

function App() {
  const [card, setCard] = useState('1');

  return (
    <div className="wrapper">
      <h1>Card text:</h1>
      <button onClick={() => setCard(Math.floor(Math.random() * 57) + 1)}>Nile</button>
      <Cards name={card} />
    </div>
  );
}

export default App;

My card.js component code is;我的 card.js 组件代码是;

export default function Cards({ name }) {
  const [cardInformation, setCards] = useState({});
  
  useEffect(() => {
    getCards(name)
    .then(data =>
      setCards(data)
    );
  }, [name])
  
  const FlippyOnHover = ({ flipDirection = 'vertical' }) => (
    <Flippy flipOnHover={true} flipDirection={flipDirection}>
    </Flippy>
  );

  return(
    <div>
      <Flippy flipOnHover={false} flipOnClick={true} flipDirection="vertical" style={{ width: '200px', height: '200px' }} >
    <FrontSide style={{backgroundColor: '#41669d',}}>
    </FrontSide>
    <BackSide style={{ backgroundColor: '#175852'}}>
      {cardInformation.continent}
    </BackSide>
  </Flippy>
      <h2>Card text</h2>
      <ul>
        <li>{cardInformation.continent}</li>
      </ul>
    </div>
  )
}

Cards.propTypes = {
 name: PropTypes.string.isRequired
}

We can create an event.我们可以创建一个事件。 So let's call it onSetCard .所以我们称之为onSetCard

App.js file: App.js文件:

class App extends Component {
     handleSetCard= () => {
        // set state of card here
     };

     <Cards name={card}
      card=card
      onSetCard={this.handleSetCard} 
     />
}

Cards.js file: Cards.js文件:

class Cards extends Component {
    render() {
        console.log("Cards props", this.props);  
        return (
            <button
                onClick={() => this.props.onSetCard(this.props.card)}
                className="btn btn-secondary btn-sm m-2"
             >
            FooButton
            </button>

        )
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM