ãã©ãŒã«ã¹ããã£ãããã¹ããã£ãŒã«ããsetState
ã«ãã£ãŠåã¬ã³ããªã³ã°ããããšããã©ãŒã«ã¹ã倱ãããŸãã
+1
Textfieldsãã¹ã ãŒãºã«æ©èœãããã«ã¯ã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å ¥åãå€æŽããããšæŽæ°ãããç¶æ ãã³ã³ãœãŒã«ã«èšé²ãããŸãïŒã 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
ãã³ãã©ãŒãåŒã³åºããã TextField
ã®isFocused
å
éšç¶æ
ãfalseã«åãæ¿ãããŸãã onBlur
ãã³ãã©ãŒã®éã«document.activeElement
ããã°ã«èšé²ãããšïŒã©ã®ã³ã³ããŒãã³ãããã©ãŒã«ã¹ãçãã ããå€å¥ããããïŒãããã¥ã¡ã³ãã®ã«ãŒãïŒæ¬æïŒããã°ã«èšé²ãããŸãã
ãŒããã€ãã³ãã®ãœãŒã¹ãã¢ããªã®ä»ã®å Žæã®Menu
å
ã®æåã®MenuItem
ã§ãããšå€æããããšã§ããããããã«çµã蟌ãããšãã§ããŸããã disableAutoFocus
ããããã£ãtrue
ãåé¡ã解決ããŸããã ãããä»ã®èª°ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ããããã£ããã£ããããã«å¥ã®åé¡ãéããŸããïŒïŒ4387ã
ããã¯ãŸã åé¡ã§ããããšã確èªã§ããŸã...
éåžžã«åçŽãªãã°ã€ã³ãã©ãŒã ã§è¡šç€ºããŸã-ãããreduxãã©ãŒã ãšçµã¿åãããŠäœ¿çšââããŠããŸãããã©ãŒã ãæäœãããšãåã¬ã³ããªã³ã°ïŒreduxãã©ãŒã ã®çšèªã§ãã£ãŒã«ãã«è§ŠããïŒãçºçãããã©ãŒã«ã¹ã倱ãããŸãã
åé¿çãšããŠããšã©ãŒç¶æ ã«å€åããã£ãå Žåã«ã®ã¿å®éã®ãã©ãŒã ãåã¬ã³ããªã³ã°ããŸãã
selectable=true
ãšããŠèšå®ãããTable
å
ã«TextField
é
眮ããããšã§ããã®åé¡ãç°¡åã«åçŸã§ããŸãã ããªãã¯ãããç·šéãéå§ããã«ã¯ãããã¹ããã£ãŒã«ããã¯ãªãã¯ãããã³ã«ãè¡ãïŒç§ã¯ããã€ãæšæž¬ããããã«ããã©ãŒã«ã¹ãååŸãããã®èæ¯è²ãå€æŽããŸãprops
ã©ã€ã³ã®ã¯æ¬¡ã®ããã«èšå®ãããããšããããŸãselected=true
ã®ã§ãïŒåã¬ã³ããªã³ã°ãããªã¬ãŒãããšããã©ãŒã«ã¹ã倱ãããŸã...
ãããã£ãŠãåºæ¬çã«selectable
Table
å
ã§TextField
䜿çšããããšã¯ã§ããŸããããšã«ããããããåªããUXãã©ã¯ãã£ã¹ã§ãããã©ããã¯ããããŸããããããã§ã:)
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ãåçè£ çœ®ãããã·ã¥ããããšè©Šã¿ãããšãã§ããããšã«æ°ã¥ããŸããã
ããã«å¯Ÿããåé¿çã¯ãããŸããïŒ ãŸããããŒãã«å ã®éåžžã®å ¥åããã¹ãé åã䜿çšããå Žåã«ã泚æããŠãã ããã
@ dalexander01 ã解決çããèŠã€ãããŸããããmdå ¥åã³ã³ããŒãã³ãã䜿çšããŠããªããšãã«åãåé¡ãçºçããŠãããããéåžžã«redux圢åŒã«åºæã®ããã§ãã 圹ã«ç«ã£ããã¹ãããããæçš¿ã§ããŸãïŒ
@deycegããŠãã ãããããã¯å·ã€ãããšã¯ã§ããŸããðã <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>
ç§ã®å Žåã¯è§£æ±ºããŸããããã®ããã¹ããã£ãŒã«ãã«äžæã®IDãæå®ããå¿
èŠããããŸãã
ãã ããåã¬ã³ããªã³ã°åŸã«IDãå€æŽããããšã¯ã§ããŸããã ãã®ããã«ããŠãReactã¯ã©ã®èŠçŽ ããã©ãŒã«ã¹ãããŠãããã©ããã远跡ã§ããŸãã
PS myArray.mapãä»ããŠã¬ã³ããªã³ã°ãããé
åã«ããã¹ããã£ãŒã«ãããããåã¬ã³ããªã³ã°ãããšãã«åãããŒãæå®ããå¿
èŠããããŸãã
ç·šéïŒmyArrayã®ãããŒããåã¬ã³ããªã³ã°éã§åãã«ããã ãã§ãåé¡ã解決ããŸããã
ããã¹ããã£ãŒã«ãIDãshortid.generateïŒïŒã«å€æŽãããŸããã
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
å°éå
·ãç¶æ
ããŒã«èšå®ããŠå
¥åã®ãã©ãŒã«ã¹ãç·©ããããšã®çµã¿åããã®ããã§ãã
ç§ã次ã®åé¡ãæ±ããŠããŸããããå éšã§DropdownMenu https://github.com/callemall/material-ui/blob/ccf712c5733508784cd709c18c29059542d6aad1/src/SelectField/SelectFieldãåŒã³åºããŠããå Žåã¯ãSelectFieldå®è£ ã䜿çšããããšã§è§£æ±ºããŸãã
ãã®ãããDropDownMenuãè¿œå ããå¿ èŠããããŸããããã¯ãå éšã§ã³ã³ããŒãã³ããã¡ãã¥ãŒã«ã©ããããŠããŸããdisableAutoFocusãè¿œå ããŠãTextFieldã次ã®ããã«ãã©ãŒã«ã¹ãç¶æã§ããããã«ããŸããã
ãã¶ããSelectFieldããDropDownMenuã³ã³ããŒãã³ããå ¬éããå°éå ·ã§ãªãŒããã©ãŒã«ã¹ãç¡å¹ã«ããããšãã§ããŸãã
ããã«èŠåŽããŠããŠäœããæ©èœããããã ãã®äººã®ããã®1ã€ã®åé¿çã§ãããç¶æ³ã«ãã£ãŠã¯é©çšã§ããªãå¯èœæ§ããããåé¡ãçºçããå¯èœæ§ããããŸãïŒç§èªèº«ã¯å®å
šã«ã¯ããããŸãããïŒã€ã³ã¹ã¿ã³ã¹ã§å€æ°ã䜿çšããããšã§ãç¶æ
ããã ãããã£ãŠã this.state.value
代ããã«ã onChange
ãæŽæ°ãããã®ã¯this.value
onChange
ãªããŸãã ã³ã³ããŒãã³ãã«ã¯value
å°éå
·ã¯ãããŸããã 次ã«ã onChange
ãã³ãã©ãŒã§ã e.target.value
ãŸãã
ã€ã³ã¹ã¿ã³ã¹ã®å€æ°ãšç¶æ ã®éãã¯ãã€ã³ã¹ã¿ã³ã¹å€æ°ãåã¬ã³ããªã³ã°ãããªã¬ãŒããªãããšã ãã§ãã ä»ã«ãçç±ããããããããŸããããä»ã®äººãããã§ç§ã®ããã¿ãæãŸããããšãé¡ã£ãŠããŸãã
ããã§ããã®ãšã©ãŒãçºçããŸãã åé¿çã¯ãããŸããïŒ
ç§ãèŠã€ããåé¿çã¯ãshouldComponentUpdateé¢æ°ãã³ã³ããŒãã³ãã«ãªãŒããŒã©ã€ãããããã¹ããã£ãŒã«ãã§äœ¿çšãããç¶æ å€ãå€æŽãããšfalseãè¿ãããšã§ããã
`shouldComponentUpdate(nextProps, nextState) {
if(nextState.email != this.state.email) {
return false;
}
else if(nextState.password != this.state.password) {
return false;
}
else return true;
}
`
ãã®æ¹æ³ã§ãããè¡ããšãç§ã®åé¡ãä¿®æ£ãããŸããã åé¡ã¯ãç¶æ ãå€åãããã³ã«ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã©ãŒã«ã¹ããªã»ãããããããšã«ããããã§ãã ãããã£ãŠãäžèšã®é¢æ°ã䜿çšããŠãonChangeã€ãã³ããå®è¡ããŠç¶æ å€ãèšå®ãããšãã«ã¬ã³ããªã³ã°ãç¡å¹ã«ãããšãã³ã³ããŒãã³ãã¯ãªããŒããããŸããã
@ Aspintyl000ããã¯æ©èœããŸã...ããã 'value' propã䜿çšããŠããã¹ããã£ãŒã«ãã®å€ãèšå®ãããã®propã 'this.state.value'ã«èšå®ãããšãäœã衚瀺ãããŸããã ãããããããåãé€ããšãããŸãããããã§ãã
ããŒãã«ã®è¡ã§ããã¹ããã£ãŒã«ãã䜿çšããŠããŸãããããã¯åé¡ã§ã:(é²æç¶æ³ã¯ãããŸããïŒ
ç§ãåããšã©ãŒãçºçããŠããŸããã ããããcomponentDidMountïŒïŒã䜿çšããåŸ{
this.refs.textField.focusïŒïŒ;
}
ãã©ãŒã«ã¹ã倱ãããšã¯ãããŸããã ãã ããå
¥åå€ã¯è¡šç€ºãããŸããã
ç§ãè¿œå ããããšããŸãã<TextField />
ã§<Table />
ã äžèšã®ç¶æ³ã®ããã«ãç§ã¯å
¥åã«çŠç¹ãåãããããšãã§ããŸããã
ç§ã®è§£æ±ºçïŒ onClick
ã€ãã³ããã«è¿œå ããŸãselectable=false
èšå®ããŸãã å
¥åæäœã®åŸã onBlue
ã€ãã³ãã䜿çšããŠãããŒãã«ã®selectable=true
ãèšå®ããŸãã
ããªãäžå¿«ãªè¡åã
2ã€ã®å ¥åããã¯ã¹ãã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã§ã©ããããåŸããããçµéšããŸããã å€åŽã®divã¯å®å šã«åäœãå£ããŸããã ããã¯ããã®ã©ã€ãã©ãªã®èšèšã«ãããã²ã©ãæ¬ é¥ã§ãã
ãããã£ãŠãããã¯ããªãã²ã©ãåé¿çã§ãããäž»ã«æ¬¡ã®ããã«æ©èœããŸãã
ãã
onSomeValueChanged =ã€ãã³ã=> {
this.props.someValueChangedïŒevent.target.valueïŒ;
const { target } = event;
setTimeout(() => {
target.focus();
}, 10);
};
ãã
ããããããã§ã¯ãããŸãã...
@scotmatson ãããªãäžå¿«ãªæ¯ãèã...ãã®ã©ã€ãã©ãªã®èšèšã«ãããã²ã©ãæ¬ é¥ãã ããã¯ãã©ã³ãã£ã¢ã«ãã£ãŠäœãããããªãŒãœãããŠã§ã¢ã§ã...ãããstyled-components
ãšã®é¢ä¿ãããç解ããŠãã ããã
@scotmatsonå°ãªããšãç§ã®å Žåãã©ãããŒãšããŠæã£ãŠããContainer = styled.div
ãéåžžã®ã¹ã¿ã€ã«ãªãã³ã³ããŒãã³ãdiv
ã«å€æãããšãåé¡ã解決ããããšã確èªã§ããŸãã
ç·šéïŒ
ãããŠãç§ãããªãã®æ¬²æ±äžæºãå
±æããŸãã ãããã®2ã€ã®ã©ã€ãã©ãªãå®ç§ã«é£æºããŠããã°æ¬åœã«çŽ æŽãããã§ãããã ãã®åé¡ãšç¹ç°æ§ã®åé¡ã¯ãç§ãããã«è§£æ±ºãããããšãæãã§ãã2ã€ã®ããšã§ãããç§ã¯åœŒãã®æéããã©ã³ãã£ã¢ããŠããã人ã
ã«æè¬ããŠããŸãã
Edit2ïŒ
ç§ã®å Žåãåé¡ã®åå ãçºèŠããŸãããrenderã¡ãœããã§ã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã³ã³ããŒãã³ãã宣èšããŸãã ããã«ããããã¹ãŠã®åã¬ã³ããªã³ã°ã§ã³ã³ããŒãã³ããåäœæãããReactã¯åã¬ã³ããªã³ã°ã®å¢çãè¶ããŠãã©ãŒã«ã¹ãããèŠçŽ ã远跡ã§ããŸããã§ããã ããã¯ãŸããç§ã«ãšã£ãŠä»ã®ããã€ãã®åã¬ã³ããªã³ã°ã®åé¡ã«ã€ãªãããŸããã
ã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã®å®£èšããã¹ãŠã³ã³ããŒãã³ãã®å€éšã«ç§»åããããšã§ããã©ãŒã«ã¹ã倱ãããåé¡ã解決ããŸããã ããããåå¿è ã®ééãã§ãããããã§ã¯èª°ãããã«ã€ããŠèšåããŠããªãã®ã§ãç§ã¯æ»ã£ãŠå ±åãããšæããŸããã
ç§ãæ±ããŠãããšæãããåé¡ã¯ãTextFieldsïŒãŸãã¯InputïŒãobject.mapïŒïŒå ã«ã¬ã³ããªã³ã°ãããŠãããšãã¯åžžã«ãã©ãŒã«ã¹ãå€ãããšã§ãã ãããå€ã®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ã䜿çšããŠããã®ã§ãç¶æ å€åã¯input-> action-> reducerãçµç±ããããšã«æ³šæããŠãã ããã
äœãæ¡ã¯ïŒ ããããšã
ç·šé1ïŒ
åé¡ãããã«èª¿æ»ããã¿ã°ã®äœæã«äœ¿çšãããåå¿é¢æ°StepsïŒpropsïŒãåé€ããããšã§ãåé¡ãçµã蟌ãã§è§£æ±ºããŸããã
ã ãã以åã¯ãæ§é ã¯
@piltsen .map()
TextFieldsãã¬ã³ããªã³ã°ããŠãããšãã«v1.5.0ã§ãã®åé¡ãçºçããŸãã-å
¥åãšåãå€ã§ããTextFieldããŒã«çµã蟌ãã ãããå€æŽãããšTextFieldãããŠã³ããããå¯èœæ§ããããŸããåã³ãããŠçŠç¹ã倱ããŸãã ãããããªãã«åœ¹ç«ã€ãã©ããã¯ããããŸãã-ç§ã¯ä»ãŸã§ã«ããªãããããåé¡ãããšç¢ºä¿¡ããŠããŸãã
ããã¯ãã¬ã³ããŒããããã䜿çšããå Žåã®çç¶ã§ããããŸãã ã®ãããªããšããã
<HigherOrderComponent
render={hocProps => <TextField value={...} onChange={...} />
/>
ãã®åäœãåŒãèµ·ããå¯èœæ§ããããŸãã ä¿®æ£ããã«ã¯ãèšèšã§èš±å¯ãããŠããå Žåã¯ã代ããã«ãã©ã°ã¡ã³ããæž¡ããŸãã
<HigherOrderComponentThatDoesntPassOwnState
component={<TextField {...this.props}/>}
/>
ç§ã®å Žåããã©ãŒã«ã¹ã倱ãããããã§ã¯ãªãããã§ãããã«ãŒãœã«ãTextFieldããæ¶ããŸãã document.activeElementãTextFieldãšçããããšã確èªã§ããŸããããŒããŒãã³ãã³ããšããŠã¹ãã€ãŒã«ã䜿çšããŠå€ïŒã¿ã€ãçªå·ïŒãå€æŽã§ããŸããããã¹ãŠã®ã¿ã€ãã¬ãã¥ãŒãµãŒãã¬ã³ããªã³ã°ãå®è¡ããã«ãŒãœã«ã倱ãããŸãã
次ã«ãã¬ã³ããªã³ã°ã®äžã§ãidã§TextFieldãæ€çŽ¢ãã
MyTextField.blur();
MyTextField.focus();
ãããã¯åœ¹ã«ç«ããªãã ããããã¿ã€ã ã¢ãŠãã䜿çšããŠfocusïŒïŒãäœæãããšãæ©èœããŠããããã«èŠããŸãã
ç·šéïŒ
ãããšãHOCã®å
éšã§ã¯ãŸã æ©èœããŠããªãã®ã§ããšã«ãããããæŒãäžããå¿
èŠãããããã§ãã
@ younes0ç§ããããä¿®æ£ããããšã確èªã§ããŸãã ç§ã®å Žåãããã€ãã®äžè¬çãªå°éå
·ãèšå®ãããTextFieldãè¿ããæ®ãã®å°éå
·ããã®äžã«åºãããã«ããŒã¹ããŒãã¬ã¹ã³ã³ããŒãã³ãããã£ãã®ã§ã className
ãvariant
ãªã©ãæå®ããå¿
èŠã¯ãããŸããvariant
è€æ°åã ãã©ãŒã ã«å€æŽãå ãããããšããã«ããã¹ããã£ãŒã«ãã®ãã©ãŒã«ã¹ã倱ããããã«ããŒé¢æ°ãåé€ããŠãçã®TextField
äœåºŠãäœåºŠãä¿®æ£ããŸããã
ãããåéã§ããŸããããããšãæ°ããåé¡ãæåºããå¿ èŠããããŸããïŒ
ç§ã¯ãŸã ãã®åé¡ãæ±ããŠããŸããç§ã¯3.2.0ã䜿çšããŠããŸã
@OmarDavilaPè€è£œã§æ°ããåé¡ãäœæã§ããŸããïŒ
ç§ã®å Žåã¯è§£æ±ºããŸããããã®ããã¹ããã£ãŒã«ãã«äžæã®IDãæå®ããå¿ èŠããããŸãã
..ã
ãã ããåã¬ã³ããªã³ã°åŸã«IDãå€æŽããããšã¯ã§ããŸããã ãã®ããã«ããŠãReactã¯ã©ã®èŠçŽ ããã©ãŒã«ã¹ãããŠãããã©ããã远跡ã§ããŸãã
PS myArray.mapãä»ããŠã¬ã³ããªã³ã°ãããé åã«ããã¹ããã£ãŒã«ãããããåã¬ã³ããªã³ã°ãããšãã«åãããŒãæå®ããå¿ èŠããããŸããç·šéïŒmyArrayã®ãããŒããåã¬ã³ããªã³ã°éã§åãã«ããã ãã§ãåé¡ã解決ããŸããã
ããã¹ããã£ãŒã«ãIDãshortid.generateïŒïŒã«å€æŽãããŸããã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
æ¡ä»¶ä»ãã¬ã³ããªã³ã°ã§ãã®åé¡ãçºçããŠããŸãã ã¬ã³ããªã³ã°ã«ã¯ã.jsãã¡ã€ã«ã®ããŸããŸãªã³ã³ããŒãã³ããè¿ãjavascriptãªããžã§ã¯ãããããŸãã æ£ãã説æããŠããŸãããããããªããã ä¿®æ£ããããèŠããŠããã°ãã®æçš¿ãç·šéããŸãã
ç·šéïŒã€ã§ãŒã€ãç§ã¯ãããä¿®æ£ããŸããïŒ æ¡ä»¶ä»ãã§ã¬ã³ããªã³ã°ããæ¹æ³ã¯ã衚瀺ãããŠããªãå Žåã§ãåã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããšã ã£ããšæããŸãã ããžãã¯ãã¬ã³ããªã³ã°ã®å€ã«ç§»åããŸããããçŸåšã¯æ£åžžã«æ©èœããŠããããã§ãã å€ãã³ãŒãã¯æ¬¡ã®ãšããã§ãã
ç·šéïŒç§ã¯ãã®ããšã§ã¹ã¿ã€ãªã³ã°ããããšãã§ããªãã®ã§æ°ã«ããªãã§ãã ããã
ç§ã¯ä»æ¥ãã®åé¡ã«ééããæ°æéé ãã¶ã€ããŸããã ç§ã®å Žåãééã£ãŠããã®ã¯ã TextField
ãã¹ããŒãã¬ã¹ã³ã³ããŒãã³ãã§ã©ããããŠãããŒãžãããé©åã«æŽçããããšã§ããïŒããŒã¿ãèªã¿èŸŒãŸããŠããå Žåãªã©ã¯ã¬ã³ããªã³ã°ããªãã§ãã ããïŒãã useState
ãæ®ããŸãã芪ã³ã³ããŒãã³ãã®TextField
ãå¶åŸ¡ããuseState
ã³ãŒã«ããã¯ã
åŸäžã®ããã«ãããã«ç§ã®æãããåçŸããããã®å°ããªã³ãŒããµã³ãããã¯ã¹ãªã³ã¯ããããŸãïŒ
ããã§ã®åé¡ã¯ã 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 ïŒ
ç§ã«ãšã£ãŠã®åé¡ã¯ãTextFieldã®ã©ãããŒé¢æ°ãäœæããããšã§ããããã³ã³ããŒãã³ãé¢æ°å ã§ãã®é¢æ°ã宣èšããŸãããé¢æ°ã®å€ã«ç§»åãããšããã¹ãŠãæåŸ ã©ããã«æ©èœããŸããã
sendboxãµã³ãã«ãäœæããŸããhttps://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark
ãããç§ã®åé¡ã§ããã ããããšãããããŸããïŒ
æ°ã«ããªãã§ãã ãããäžèšã®ã¢ãããŒãã¯åé¡ãªãæ©èœããŸãã芪ã³ã³ããŒãã³ãå ã§ã«ã¹ã¿ã ã³ã³ããŒãã³ããå®çŸ©ãããŠããããšã«æ°ã¥ããåé¡ãçºçããŸããã 芪ã¹ã³ãŒãã®å€ã«ç§»åãããšïŒæ¬æ¥ããã¹ãããã«ïŒæ£åžžã«åäœããŸã-以åã®ãµã³ãããã¯ã¹ãæŽæ°ããŠãæ£ããã¢ãããŒãã瀺ããŸããïŒ https ïŒ
ããããšãããããŸããã ããã¯ããŸããããŸããïŒ
ç§ã«ãšã£ãŠã®åé¡ã¯ãTextFieldã®ã©ãããŒé¢æ°ãäœæããããšã§ããããã³ã³ããŒãã³ãé¢æ°å ã§ãã®é¢æ°ã宣èšããŸãããé¢æ°ã®å€ã«ç§»åãããšããã¹ãŠãæåŸ ã©ããã«æ©èœããŸããã
sendboxãµã³ãã«ãäœæããŸããhttps://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark
@ fleischman718ãããç解ããŠãããŠããããšãïŒ èŠªã³ã³ããŒãã³ãã®å®çŸ©å ã®TextFieldã®ã©ããã³ã°ã³ã³ããŒãã³ãé¢æ°ãåé€ãããšãåé¡ãä¿®æ£ãããŸããã
ãµã³ãããã¯ã¹ã§äœãèµ·ãã£ãŠããã®ããç解ããã®ã«1ç§ããã£ãã®ã§ã以äžã«èŠçŽã瀺ããŸãã
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
ã«å€æãããšãåé¡ã解決ããããšã確èªã§ããŸããç·šéïŒ
ãããŠãç§ãããªãã®æ¬²æ±äžæºãå ±æããŸãã ãããã®2ã€ã®ã©ã€ãã©ãªãå®ç§ã«é£æºããŠããã°æ¬åœã«çŽ æŽãããã§ãããã ãã®åé¡ãšç¹ç°æ§ã®åé¡ã¯ãç§ãããã«è§£æ±ºãããããšãæãã§ãã2ã€ã®ããšã§ãããç§ã¯åœŒãã®æéããã©ã³ãã£ã¢ããŠããã人ã ã«æè¬ããŠããŸãã
Edit2ïŒ
ç§ã®å Žåãåé¡ã®åå ãçºèŠããŸãããrenderã¡ãœããã§ã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã³ã³ããŒãã³ãã宣èšããŸãã ããã«ããããã¹ãŠã®åã¬ã³ããªã³ã°ã§ã³ã³ããŒãã³ããåäœæãããReactã¯åã¬ã³ããªã³ã°ã®å¢çãè¶ããŠãã©ãŒã«ã¹ãããèŠçŽ ã远跡ã§ããŸããã§ããã ããã¯ãŸããç§ã«ãšã£ãŠä»ã®ããã€ãã®åã¬ã³ããªã³ã°ã®åé¡ã«ã€ãªãããŸããã
ã¹ã¿ã€ã«ä»ãã³ã³ããŒãã³ãã®å®£èšããã¹ãŠã³ã³ããŒãã³ãã®å€éšã«ç§»åããããšã§ããã©ãŒã«ã¹ã倱ãããåé¡ã解決ããŸããã ããããåå¿è ã®ééãã§ãããããã§ã¯èª°ãããã«ã€ããŠèšåããŠããªãã®ã§ãç§ã¯æ»ã£ãŠå ±åãããšæããŸããã