Toon posts:

React/MaterialUI ConfirmDialog

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor mijn opdrachtgever ben ik bezig om een website om te zetten van een server side oplossing naar een react frontend.

Ik heb een react component gemaakt met de naam ConfirmDialog. Dit wordt dan een weet u het zeker dialog.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import React from 'react';
import Dialog from 'material-ui/Dialog';
import FlatButton from 'material-ui/FlatButton';
import RaisedButton from 'material-ui/RaisedButton';

class ConfirmDialog extends React.Component {

    state = {
        showDialog: false
    };

    handleOpen = () => {
        this.setState({showDialog: true});
    };

    handleClose = () => {
        this.setState({showDialog: false});
    };

    handleOK = () => {
        alert('handleOk');
    };

    handleCancel = () => {
        this.handleClose();
    };

    standardActions = [
        <FlatButton
            label={this.props.cancelBtnText}
            primary={true}
            onTouchTap={this.handleCancel}
        />,
        <FlatButton
            label={this.props.okBtnText}
            primary={true}
            keyboardFocused={true}
            onTouchTap={this.handleOK}
        />,
    ];

    render() {
        return (
            <div>
                <RaisedButton label={this.props.openBtnText} onTouchTap={this.handleOpen} />
                <Dialog
                    title={this.props.titleText}
                    actions={this.standardActions}
                    modal={true}
                    open={this.state.showDialog}
                    onRequestClose={this.handleClose}
                >
                    {this.props.messageText}
                </Dialog>
            </div>
        );
    }
}

ConfirmDialog.defaultProps = {
    cancelBtnText: 'Annuleren',
    okBtnText: 'Doorgaan',
    messageText: 'Wilt u doorgaan?',
    titleText: 'Weet u het zeker?',
    openBtnText: 'Bevestigen'
};

export default ConfirmDialog;


Dit werkt echter ik kan deze component niet extenden. Ik zie 2 mogelijkheden echter beide willen niet,

1. Ik kan de ConfirmDialog extenden op de volgende manier echter die werkt niet omdat in COnfirmDialog worden de methodes met this.methodeNaam aangeroepen en dan wordt de handleOK in de sub class niet aangeroepen.

code:
1
2
3
4
5
class UserAccountDeleteConfirmDialog extends ConfirmDialog {

  // Override handleOK methode

}


2. Ik kan een component maken die de confirmDialog terug geeft in de render methode echter dan kan ik de actions niet overschrijven:

code:
1
2
3
4
5
6
7
8
9
class UserAccountDeleteConfirmDialog extends React.Component {

    render() {
        return (
            <ConfirmDialog messageText="Weet u zeker dat u deze gebruiker wilt verwijderen" openBtnText="Verwijderen" cancelBtnText="Annuleren" okBtnText="Doorgaan" titleText="Weet u het zeker?" />
        )
    }

}


Ik werk vooral in Java en dan is React een hele onduidelijke onoverzichtelijke iets. Ik wil een component kunnen extenden zodat die component op het scherm verschijnt. Hoe doe ik dat?

Acties:
  • 0 Henk 'm!

  • q-enf0rcer.1
  • Registratie: Maart 2009
  • Laatst online: 09-10 14:44
Je kunt hier eens kijken voor de mogelijkheden:

https://developer.mozilla...Sub_classing_with_extends

Ik ben geen React kenner, maar in de documentatie van React wordt verwezen naar deze pagina, ik denk daarom dat de implementatie verder hetzelfde is.

Paar dingen die mij potentiële alarmbellen doen rinkelen:


'If there is a constructor present in sub-class, it needs to first call super() before using "this".'

en

'Note that classes cannot extend regular (non-constructible) objects. If you want to inherit from a regular object, you can instead use Object.setPrototypeOf():'

Wellicht is het het ook waard om eens je code te testen zonder React, kijken of het dan wel werkt.

[ Voor 7% gewijzigd door q-enf0rcer.1 op 12-04-2017 16:12 ]