рдпрджрд┐ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЙрд╕реЗ setState
рд╣рд┐рд╕рд╛рдм рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред
+1
рдореБрдЭреЗ TextBields рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП defaultValue рдХреЗ рд╕рд╛рде onBlur рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХрд┐рд╕реА рдХреЛ рднреА рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ?
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рд╣реИред рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдХреЛрдб:
//taken from examples/webpack-example
/** In this file, we create a React component which incorporates components provided by material-ui */
const React = require('react');
const RaisedButton = require('material-ui/lib/raised-button');
const TextField = require('material-ui/lib/text-field');
const Dialog = require('material-ui/lib/dialog');
const ThemeManager = require('material-ui/lib/styles/theme-manager');
const LightRawTheme = require('material-ui/lib/styles/raw-themes/light-raw-theme');
const Colors = require('material-ui/lib/styles/colors');
const Main = React.createClass({
childContextTypes: {
muiTheme: React.PropTypes.object,
},
getInitialState () {
return {
muiTheme: ThemeManager.getMuiTheme(LightRawTheme),
counter: 0,
};
},
getChildContext() {
return {
muiTheme: this.state.muiTheme,
};
},
componentWillMount() {
let newMuiTheme = ThemeManager.modifyRawThemePalette(this.state.muiTheme, {
accent1Color: Colors.deepOrange500,
});
this.setState({muiTheme: newMuiTheme});
},
componentDidMount() {
this.refs.textField.focus();
},
render() {
console.log(this.state.counter);
let containerStyle = {
textAlign: 'center',
paddingTop: '200px',
};
let standardActions = [
{ text: 'Okay' },
];
return (
<div style={containerStyle}>
<Dialog
title="Super Secret Password"
actions={standardActions}
ref="superSecretPasswordDialog">
1-2-3-4-5
</Dialog>
<h1>material-ui</h1>
<h2>example project</h2>
<TextField ref="textField" onChange = {this._incrementStateCounter}/>
<RaisedButton label="Super Secret Password" primary={true} onTouchTap={this._handleTouchTap} />
</div>
);
},
_handleTouchTap() {
this.refs.superSecretPasswordDialog.show();
},
_incrementStateCounter () {
this.setState({counter: this.state.counter + 1});
},
});
module.exports = Main;
рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрди рдПрдХреНрд╢рди рд╣реИ (рдЕрдкрдбреЗрдЯ рд╕реНрдЯреЗрдЯ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдЗрдирдкреБрдЯ рдкрд░рд┐рд╡рд░реНрддрди)ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ TextField рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦрддрд╛ рд╣реИ:
рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИред @ shaurya947 рдЙрджрд╛рд╣рд░рдг рдиреЗ рдмрдЧ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ TextField рдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдереАред
рдЙрдкрдпреЛрдЧ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
<TextField ref="textField" value={this.state.valueToBeEdited} onChange = {this._incrementStateCounter}/>
рдпрд╛
<TextField ref="textField" defaultValue={this.state.valueToBeEdited} onChange = {this._incrementStateCounter}/>
рдореИрдВ рдпрд╣ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ TextFields рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ value
рдХреА рдкреНрд░реЛрдк TextField
, рддреЛ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХ рд╣реИред
рдореИрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдирдИ рдЪреЗрддрд╛рд╡рдиреА рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ: 'TextField рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред' рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ TextField
рдореЗрдВ рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред
рдереЛрдбрд╝рд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ TextField
рдХрд╛ рдлрд╝реЛрдХрд╕ рдЦреЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ onBlur
рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ isFocused
TextField
рдЭреВрдареА рд╣реИред рдЕрдЧрд░ рдореИрдВ onBlur
рд╣реИрдВрдбрд▓рд░ рдХреЗ рджреМрд░рд╛рди document.activeElement
рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдШрдЯрдХ рдиреЗ рдлреЛрдХрд╕ рдЪреБрд░рд╛рдпрд╛ рд╣реИ) рддреЛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рд░реВрдЯ) рдХреЗ рд░реВрдЯ рдХреЛ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдзрдмреНрдмрд╛ рдШрдЯрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдРрдк рдореЗрдВ Menu
рдХрд╣реАрдВ рдкрд╣рд▓реЗ MenuItem
ред disableAutoFocus
рд╕рдВрдкрддреНрддрд┐ рдХреЛ true
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдордирд╛рдЗрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╣реИ: # 4387ред
рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ ...
рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдореЗрдВ рджреЗрдЦрдХрд░ - рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ redux рдлрд╝рд╛рд░реНрдо рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдЬрдм рдореИрдВ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдБ рддреЛ рдпрд╣ рдкреБрдирдГ-рд░реЗрдВрдбрд░ (redux-form parlance рдореЗрдВ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░рдиреЗ) рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬреЛ рдлрд╝реЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ рд╣реИред
рдЖрдк Table
selectable=true
рднреАрддрд░ рд╕реЗрдЯ рдХрд░рдХреЗ TextField
рдбрд╛рд▓рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рднреА рдЖрдк рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрди рдХреЛ рдлрд╝реЛрдХрд╕ рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ props
рд▓рд╛рдЗрди рдХрд╛ selected=true
рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЯреНрд░рд┐рдЧрд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдк рдзреНрдпрд╛рди рдЦреЛ рджреЗрдВрдЧреЗ ...
рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ TextField
рдЙрдкрдпреЛрдЧ selectable
Table
рднреАрддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ UX рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА :)
рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░, рдореИрдВ рдПрдХ рдкреНрд░рдЬрдирдирдХрд░реНрддрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо? рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЗрдирдкреБрдЯ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ред
@ dalexander01 рдХреЛ рдПрдХ "рд╕рдорд╛рдзрд╛рди" рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд redux-form рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ md рдЗрдирдкреБрдЯ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЕрдЧрд░ рдЗрд╕рдХреЗ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧ рд╕реЗ рдореИрдВ рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ!
@deyceg рдХреГрдкрдпрд╛, рдпрд╣ рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ pleaseред рдмрд╕ <Dialog/>
рдФрд░ <TextField/>
рдЗрд╕ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВред
<Dialog
open={this.props.showDialog}
title={'New ' + this.props.type}
autoScrollBodyContent={true}
actions={actions}
bodyStyle={styles.dialogContent}
>
<SelectField
name='sub_type'
value={this.props.top_card.sub_type}
onChange={(e, k, payload) => this.props.topCardSelectChange('sub_type', payload)}
floatingLabelText='Type'
>
{menuItemsJSX}
</SelectField>
<TextField
name='title'
className='story-title'
value={this.props.top_card.title}
onChange={this.props.topCardChange}
floatingLabelText='Title'
fullWidth={true}
multiLine={true}
style={styles.title}
/>
<TextField />
</Dialog>
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрд╕ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдХрд┐рд╕ рддрддреНрд╡ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ рдпрд╛ рдирд╣реАрдВ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рдореЗрдВ textfields рдерд╛ рдЬреЛ myArray.map рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рдХреБрдВрдЬреА рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдореЗрд░реЗ "рдРрд░реЗ" рдкрд░ "рдХреА" рд╣реЛрдиреЗ рд╕реЗ рд░реЗрдпрд░реЗрдВрдбрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб рдЖрдИрдбреА рдмрджрд▓ рдХрд░ рд╢рд╛рд░реНрдЯ.рдЧрдВрдЬреЗрдЯ () рд╣реЛ рдЧрдИ рд╣реИред
params.map(function(p,i){
return(
<div key={i}> <--- this will always be the same for this particular row.
<div className='param-inner'>
<TextField id={shortid.generate()} value = {p.value} onChange={this.updateParam.bind(this,i)}/> <-- id here can be random, but it is necessary to avoid browser warning "we don't have enough information..."
</div>
<div className='param-inner'>{p.unit}</div>
</div>
)
}.bind(this));
рдХреЛрдИ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ ( refs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛)? рдпрд╣ onChange
рдХрд╛ рд╕рдВрдпреЛрдЬрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ value
рдХреЛ рдПрдХ рд░рд╛рдЬреНрдп рдХреБрдВрдЬреА рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЛ рдвреАрд▓рд╛ рдлреЛрдХрд╕ рдмрдирд╛рддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рднреА рдереА, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд┐рд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ SelectField рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЗрдиреЗ рд╕реЗ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдПрдХ DropdownMenu https://github.com/callemall/material-ui/blob/ccf712457335087848480709c18c29059542d6aad1/SlectFFF/FlectFMFu рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рднреА рдбреНрд░реЙрдкрдбрд╛рдЙрдирдореЗрдиреВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдиреВ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдХреЛ рдлреЛрдХрд╕ рдмреЗрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рд╣реИред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо SelectField рд╕реЗ рдПрдХ DropDownMenu рдШрдЯрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдСрдЯреЛрдлреЛрдХрд╕ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдореБрджреНрджреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЦреБрдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ) рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рдЗрд╕рд▓рд┐рдП this.state.value
рдмрдЬрд╛рдп рдпрд╣ this.value
рдХрд┐ onChange
рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛ред рдШрдЯрдХ рдореЗрдВ value
рдкреНрд░реЛрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдлрд┐рд░ onChange
рд╣реИрдВрдбрд▓рд░ рдкрд░ рдЖрдк e.target.value
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдВрддрд░ рдмрдирд╛рдо рд░рд╛рдЬреНрдп рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд░реНрдЬрди рд░реА-рд░реЗрдВрдбрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░ рдореЗрд░реА рд╕реБрд╕реНрдд рдкрдХрдбрд╝ рд╣реЛрдЧреАред
рдлрд┐рд░ рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо?
рдореБрдЭреЗ рдЬреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛, рд╡рд╣ рдерд╛ рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП shouldComponentUpdate рдлрдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреЗрдЯреНрд╕ рд╡реИрд▓реНрдпреВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рд╡рд╣ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
`shouldComponentUpdate(nextProps, nextState) {
if(nextState.email != this.state.email) {
return false;
}
else if(nextState.password != this.state.password) {
return false;
}
else return true;
}
`
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд░ рдмрд╛рд░ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдлрд┐рд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕реНрдЯреЗрдЯ рд╡реИрд▓реНрдпреВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реНрдпреБрдХреНрдд рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
@ Aspintyl000 рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдХреБрдЫ рд╣рдж рддрдХред рдЬрдм рдореИрдВ 'рдорд╛рди' рдкреНрд░реЙрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЙрд╕ рдкреНрд░реЛрдк рдХреЛ 'this.state.value' рдкрд░ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдореЗрдВ textfields рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ :( рдХреЛрдИ рдкреНрд░рдЧрддрд┐?
рдореБрдЭреЗ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рдереАред рд▓реЗрдХрд┐рди ComponentsDidMount () {рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
this.refs.textField.focus ();
}
рдпрд╣ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдЦреЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдореИрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА <TextField />
рдПрдХ рдореЗрдВ <Table />
ред рдЙрдкрд░реЛрдХреНрдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рддрд░рд╣, рдореИрдВ рдЗрдирдкреБрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди: рдПрдХ onClick
рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВselectable=false
ред рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЯреЗрдмрд▓ рдХреЗ selectable=true
рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onBlue
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ред
рдореИрдВрдиреЗ рджреЛ рдЗрдирдкреБрдЯ рдмрдХреНрд╕реЗ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓-рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рдерд╛ред рдмрд╛рд╣рд░реА div рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдПрдХ рднрдпрд╛рдирдХ рджреЛрд╖ рд╣реИред
рддреЛ рдпрд╣ рдПрдХ рдмрд╣реБрдд рднрдпрд╛рдирдХ рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
`` ``
onSomeValueChanged = рдШрдЯрдирд╛ => {
(Event.target.value) this.props.someValueChanged;
const { target } = event;
setTimeout(() => {
target.focus();
}, 10);
};
`` ``
рд╣рд╛рдБ, рд╕реБрдВрджрд░ рдирд╣реАрдВ ...
@scotatsatson "рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ ... рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рднрдпрд╛рдирдХ рджреЛрд╖"ред рдпрд╣ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ... styled-components
рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ рд╣реИред
@scotmatson рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдореИрдВ Container = styled.div
рдореБрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдЧреИрд░-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХ div
ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдФрд░ рдореИрдВ рдЖрдкрдХреА рдХреБрдВрдард╛рдУрдВ рдХреЛ рднреА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдпрд╣ рдореБрджреНрджрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореБрджреНрджрд╛ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕реНрддреНрд░реА рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕рдордп рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
EDIT2:
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рдереА: рд░реЗрдВрдбрд░-рдореЗрдердб рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯ рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛! рдпрд╣ рд╣рд░ рдкреБрди: рд░реЗрдВрдбрд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХрд╛ рд░реА-рд░реЗрдВрдбрд░ рд╕реАрдорд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд░реА-рд░реЗрдВрдбрд░ рдореБрджреНрджреЛрдВ рдХреА рдУрд░ рднреА рдЕрдЧреНрд░рд╕рд░ рдерд╛ред
рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдореЗрд░реА рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдПрдХ рдЧрд╝рд▓рддреА рдХреА рдЧрд╝рд▓рддреА рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣рд╛рдБ рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдБрдЧрд╛ред
рдореБрдЭреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛ рд░рд╣реА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рднреА рдПрдХ TextFields (рдпрд╛ рдЗрдирдкреБрдЯ) рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдлреЛрдХрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдирдХреНрд╢реЗ рдХреЗ рдмрд╛рд╣рд░ TextFields рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рд╕рд╣рд╛рд░рд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ? рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЧрдпрд╛ рд╣реВрдВ
рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднрд╛рдЧреНрдп рдХреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд▓рдЧрднрдЧ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рдореЛрдЯрд╛ рдврд╛рдВрдЪрд╛ рдпрд╣ рд╣реИ
рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓
...
function Steps(props) {
const { steps } = props;
if(steps) {
return steps.map((step, index) => (
<div key={(step.order === '' ? index : step.order)}>
<NewUxCard step={step} index={index} onChange={props.onChange}
onChangeCard={props.onChangeCard} onParamChange={props.onParamChange}/>
</div>
));
}
}
<div>
<TextField/> //working
<Steps steps={this.props.ux.steps} onChange={this.onChange}
onChangeCard={this.handleChangeCard} onParamChange={this.handleParamChange} />
</div>
NewUxCard
...
<div>
<TextField type="text" fullWidth id={"qq"+this.props.index} label="Name"
value={this.props.step.name} onChange={this.props.onChangeCard('name', this.props.index)} margin="normal" /> //not working - loses focus on each key stroke
</div>
рд╡рд░реНрде рдиреЛрдЯрд┐рдВрдЧ рдХрд┐ рдореИрдВ Redux-React рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЗрдирдкреБрдЯ-> рдПрдХреНрд╢рди-> reducer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдзрдиреНрдпрд╡рд╛рдж
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 1:
рд╕рдорд╕реНрдпрд╛ рдХреА рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЪрд░рдг (рд╕рд╣рд╛рд░рд╛) рдЬреЛ рдПрдХ рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рддреЛ рдкрд╣рд▓реЗ, рд╕рдВрд░рдЪрдирд╛ рдереА
@ рдкрд┐рд▓реНрдЯрд╕реЗрди рдореБрдЭреЗ рд╕рд┐рд░реНрдл .map()
рдореЗрдВ TextFields рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп v1.5.0 рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ TextField рдХреБрдВрдЬреА рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдп рд╣реЛрдиреЗ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг TextField рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдФрд░ рдзреНрдпрд╛рди рдЦреЛрдирд╛ред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдм рддрдХ рдЖрдк рдЗрд╕реЗ рд╣рд▓ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ
рдпрд╣ рднреА рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд▓рдХреНрд╖рдг рд╣реИред рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛
<HigherOrderComponent
render={hocProps => <TextField value={...} onChange={...} />
/>
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдЧрд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ:
<HigherOrderComponentThatDoesntPassOwnState
component={<TextField {...this.props}/>}
/>
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЛрдХрд╕ рдирд╣реАрдВ рдЦреЛрдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди TextField рд╕реЗ рдХрд░реНрд╕рд░ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ document.activeElement рдореЗрд░реЗ TextField рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдореИрдВ рдореВрд▓реНрдп (рдкреНрд░рдХрд╛рд░ рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдмреЛрд░реНрдб рдХрдорд╛рдВрдб рдФрд░ рдорд╛рдЙрд╕ рд╡реНрд╣реАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ reducer рд░рди рд░реЗрдВрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд░реНрд╕рд░ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рд░реЗрдВрдбрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдореИрдВ рдЕрдкрдиреЗ TextField рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрдирд╛рддрд╛ рд╣реВрдВ
MyTextField.blur();
MyTextField.focus();
, рдЬреЛ рдорджрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд╕рд╛рде рдлреЛрдХрд╕ () рдХрд░рддрд╛ рд╣реВрдВ , рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдареАрдХ рд╣реИ, рдПрдЪрдУрд╕реА рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдКрдкрд░ рдзрдХреЗрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
@ younes0 рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЗрд▓реНрдкрд░ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдерд╛ рдЬреЛ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рд▓реМрдЯрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рдмрд╛рдХреА рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдлреИрд▓рд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ className
рдпрд╛ variant
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдкреВрд░реЗ рдлреЙрд░реНрдо рдкрд░ TextField
s рдХреЛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред
рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ, рдореИрдВ 3.2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
@OmarDavilaP рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреНрд░рдЬрдирди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрд╕ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
...
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдХрд┐рд╕ рддрддреНрд╡ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ рдпрд╛ рдирд╣реАрдВ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рдореЗрдВ textfields рдерд╛ рдЬреЛ myArray.map рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рдХреБрдВрдЬреА рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАредрд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдореЗрд░реЗ "рдРрд░реЗ" рдкрд░ "рдХреА" рд╣реЛрдиреЗ рд╕реЗ рд░реЗрдпрд░реЗрдВрдбрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб рдЖрдИрдбреА рдмрджрд▓ рдХрд░ рд╢рд╛рд░реНрдЯ.рдЧрдВрдЬреЗрдЯ () рд╣реЛ рдЧрдИ рд╣реИредparams.map(function(p,i){ return( <div key={i}> <--- this will always be the same for this particular row. <div className='param-inner'> <TextField id={shortid.generate()} value = {p.value} onChange={this.updateParam.bind(this,i)}/> <-- id here can be random, but it is necessary to avoid browser warning "we don't have enough information..." </div> <div className='param-inner'>{p.unit}</div> </div> ) }.bind(this));
рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛:
<NewTextField key={user.id+Math.random()}>
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛:
<NewTextField key={user.id}>
рддреЛ, рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд▓рдЧрддрд╛ рд╣реИ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рд╣рд░ рдмрд╛рд░ рдЬрдм рдпрд╣ рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!
рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark
рдореБрдЭреЗ рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ javascript рдСрдмреНрдЬреЗрдХреНрдЯ рд░реЗрдВрдбрд░ рдореЗрдВ рд╣реИ рдЬреЛ .js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЬрдм рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓реВрдВрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╛рдж рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛! рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рд╣рд░ рдШрдЯрдХ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрдм рд╡рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдореИрдВ рддрд░реНрдХ рдХреЗ рдмрд╛рд╣рд░ рд╕реМрдВрдк рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╣реИ:
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЗрд╕ рдЪреАрдЬрд╝ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред
рдореИрдВрдиреЗ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреАрдЯ рд▓рд┐рдпрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдореЗрд░реЗ рдкреЗрдЬ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TextField
рдХреЛ рдЕрдкрдиреЗ рдкреЗрдЬ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯ рд░рд╣рд╛ рдерд╛ (рдпрджрд┐ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрджрд┐ рдЖрджрд┐ рд╕реЗ рдХреБрдЫ рд░реЗрдВрдбрд░ рди рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ useState
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ TextField
рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ред
рдкреЛрд╕реНрдЯрд░рд┐рдЯреА рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдореВрд░реНрдЦрддрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдбреИрдВрдбрдмреЙрдХреНрд╕ рд▓рд┐рдВрдХ рд╣реИ: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb
рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ TextField
рд░реИрдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдКрдВрдЧрд╛? рдЗрд╕ рдмрдЧ рдореЗрдВ HOC рдФрд░ createElement
рджреЛрдиреЛрдВ рд▓рдЧрддреЗ рд╣реИрдВ:
const MyField= ({ name, ...props }) => (
<TextField
fullWidth
variant="outlined"
size="small"
name={name}
{...props}
/>
);
const MyField= ({ name, ...rest }) => {
return React.createElement(TextField, {
fullWidth: true,
variant: "outlined",
size: "small",
name: name,
{...rest}
});
};
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдЬрдм рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!
рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark
рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдереАред рдзрдиреНрдпрд╡рд╛рдж!
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдЬрдм рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb
рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛!
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!
рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark
@ fleischman718 рдпрд╣ рдПрдХ рдмрд╛рд╣рд░ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ TextField рдХреЗ рд▓рд┐рдП рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ!
рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рд▓рдЧрд╛ рдХрд┐ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдиреАрдЪреЗ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛:
import { TextField } from '@material-ui/core';
const ParentComponent = () => {
// DON'T DO THIS!!!
// fix issue by moving this component definition outside of the ParentComponent
// or assign the TextField to a variable instead
const TextFieldWrapper = () => (
<TextField />
);
return (
<div>
<TextFieldWrapper />
</div>
)
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@scotmatson рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдореИрдВ
Container = styled.div
рдореБрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдЧреИрд░-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХdiv
редрд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдФрд░ рдореИрдВ рдЖрдкрдХреА рдХреБрдВрдард╛рдУрдВ рдХреЛ рднреА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдпрд╣ рдореБрджреНрджрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореБрджреНрджрд╛ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕реНрддреНрд░реА рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕рдордп рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
EDIT2:
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рдереА: рд░реЗрдВрдбрд░-рдореЗрдердб рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯ рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛! рдпрд╣ рд╣рд░ рдкреБрди: рд░реЗрдВрдбрд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХрд╛ рд░реА-рд░реЗрдВрдбрд░ рд╕реАрдорд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд░реА-рд░реЗрдВрдбрд░ рдореБрджреНрджреЛрдВ рдХреА рдУрд░ рднреА рдЕрдЧреНрд░рд╕рд░ рдерд╛ред
рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдореЗрд░реА рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдПрдХ рдЧрд╝рд▓рддреА рдХреА рдЧрд╝рд▓рддреА рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣рд╛рдБ рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдБрдЧрд╛ред