将道具和其他属性与React组件一起使用

问题描述 投票:0回答:1

我创建了一个react组件,并将在其他组件中重用它。

<SC_Button label = "English" btnStyle = "sc-btn-default--sinhala mb-2" onClick={this.handleClick}/>

但是在onClick上定义的函数不会执行,因为它与传递给组件的道具一起使用。我想React也将onClick当作道具来阅读。我很新来做出反应。

下面的方法。但是由于样式问题,我不想用额外的div包装我的react组件。

<div onClick={this.handleClick} >
    <SC_Button label = "English" btnStyle = "sc-btn-default--sinhala mb-2"/>
</div>

在React组件定义中可以使用props和其他属性吗?

编辑:

父组件

import React from 'react';
import { withRouter } from "react-router-dom";

import SC_Button from '../components/button';

class Home extends React.Component {

    handleClick = () => {
        this.props.history.push('/page2');
    }

    render() {

        return (
            <div className="container-fluid">
                <div className="row sc-overlay sc-overlay-main">
                    <div className="col-md-12 col-xl-5 offset-xl-1">
                        <span className = "sc-overlay-main__left">
                            <span className = "sc-main-image">
                                <img src={require('../assets/dialog_logo.png')} />
                            </span>
                            <h1 className="mt-4">Welcome to MyDialog</h1>
                        </span>
                    </div>
                    <div className="col-md-12 col-xl-5">
                        <div className="row sc-overlay-main__right">
                            <label>Choose your preferred language</label>
                            <SC_Button label = "සිංහල" btnStyle = "sc-btn-default--sinhala mb-2" onClick={this.handleClick}/>
                            <SC_Button label = "தமிழ்" btnStyle = "sc-btn-default--tamil mb-2" />
                            <SC_Button label = "English" btnStyle = "sc-btn-default--english mb-2" />
                        </div>
                    </div>
                </div>
            </div>
        );
    }
}

export default withRouter(Home);

SC_Button组件

import React from 'react';
import { withRouter } from "react-router-dom";

class SC_Button extends React.Component{

    constructor(props) {
        super(props);
    }

    render() {

        return (
            <button type="button" className={`sc-btn-default ${ this.props.btnStyle }`}>{this.props.label}</button>
        );
    }
}

export default withRouter(SC_Button);
reactjs components react-props
1个回答
1
投票

您的<SC_Button />组件或您创建的任何自定义组件不会自动实现事件处理程序。本质上,您只是在给它另一个抛弃的道具onClick。您必须在返回的DOM元素中使用要传递的回调:

SC_Button.js

import React from 'react';
import { withRouter } from "react-router-dom";

class SC_Button extends React.Component{
    constructor(props) {
        super(props);
    }


    render() {

        return (
            <button 
                type="button"
                className={`sc-btn-default ${ this.props.btnStyle }`} 
                onClick={this.props.handleClick}
            >
                {this.props.label}
            </button>
        );
    }
}

export default withRouter(SC_Button);

无需在组件中定义handleClick函数,因为每次实例化它时,它将作为道具传递。这允许不同的实例具有不同的行为。

© www.soinside.com 2019 - 2024. All rights reserved.