Material-ui: [FlatButton] ๋ฒ„ํŠผ์œผ๋กœ ํŒŒ์ผ ์ž…๋ ฅ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 05์›” 15์ผ  ยท  27์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mui-org/material-ui

์ด๊ฒƒ์œผ๋กœ...

<FlatButton primary={true} label="Choose an Image">
  <input type="file" id="imageButton"></input>
</FlatButton>

์‹ค์ œ๋กœ dom์—์„œ ํŒŒ์ผ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๋ฒ„ํŠผ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค(๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋„ ํŒŒ์ผ ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์Œ).

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋ฉด RaisedButton ์— containerElement ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ž…๋ ฅ ์š”์†Œ๋ฅผ ์ž์‹์œผ๋กœ ๊ฐ–๋Š” ๋ฐ ๋” ์ ํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ด๋ธ” ;-)

<RaisedButton
  containerElement='label' // <-- Just add me!
  label='My Label'>
    <input type="file" />
</RaisedButton>

๋ชจ๋“  27 ๋Œ“๊ธ€

๋ฒ„์ „ 0.7.5.

@nschaubeck ๋ฌธ์„œ ์‚ฌ์ดํŠธ์˜ ๋ฒ„ํŠผ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@hai-cea ๋„ค ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ์š”์†Œ๊ฐ€ ์ž์‹์„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ DOM์— <input> ์š”์†Œ๋„ ์—†๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

์ €๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. @nschaubeck ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์€ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@e-monson ์‹ค์ œ๋กœ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!
ํ•˜์ž ์Šคํƒ€์ผ = {
์˜ˆ์‹œ์ด๋ฏธ์ง€์ž…๋ ฅ: {
์ปค์„œ: 'ํฌ์ธํ„ฐ',
์œ„์น˜: '์ ˆ๋Œ€',
์ƒ๋‹จ: '0',
ํ•˜๋‹จ: '0',
์˜ค๋ฅธ์ชฝ: '0',
์™ผ์ชฝ: '0',
๋„ˆ๋น„: '100%',
๋ถˆํˆฌ๋ช…๋„: '0'
}
}

      <FlatButton label="Choose an Image" primary={true}>
        <input id="imageButton" style={styles.exampleImageInput} type="file"></input>
      </FlatButton>

@nikhildaga ๋ฒ„ํŠผ์— ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด W3C ์‚ฌ์–‘์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Chrome์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์†”๋ฃจ์…˜์€ ๋ฒ„ํŠผ์ด ์ˆจ๊ฒจ์ง„ ์ž…๋ ฅ ํ•„๋“œ์˜ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

handleChange: function(e){
  console.log(e.target.value)
},
_openFileDialog: function(){
  var fileUploadDom = React.findDOMNode(this.refs.fileUpload);
  fileUploadDom.click();
},
render: function() {
  return (
    <FlatButton
      label="Upload file"
      onClick={this._openFileDialog}/>
    <input
      ref="fileUpload"
      type="file" 
      style={{"display" : "none"}}
      onChange={this._handleChange}/>
  );
}

์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค...
๋ฌธ์„œ์—์„œ ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์€ @Wofiel์ด ๋งํ•œ ๋Œ€๋กœ Chrome์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (๋ฒ ํƒ€ 15-0.2์—์„œ๋„ ์—ฌ์ „ํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค)

htmlFor ์„ <FlatButton> (๋˜๋Š” <RaisedButton> )๋กœ ์„ค์ •ํ•˜๊ณ  Id๋ฅผ ์ž…๋ ฅ ํŒŒ์ผ๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ๊ฒŒ ๋‹ค์ง€ ์•Š์„๊นŒ์š”? ์ˆ˜๋™์œผ๋กœ ํด๋ฆญ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค...
๋ ˆ์ด๋ธ”์— ๋ฒ„ํŠผ์„ ๋ž˜ํ•‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ @Wofiel ์ด ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์†”๋ฃจ์…˜์ด ์—†์„ ๋•Œ ์ด๊ฒƒ์„ ๋‹ซ๋Š” ์ด์œ 

์•ˆ๋…•ํ•˜์„ธ์š” @Wofiel ์ƒํƒœ ๋น„์ €์žฅ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ฐธ์กฐ์—†์ด์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

@excalliburbd id์™€ Jquery๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Birssan dom ์กฐ์ž‘ ๋ฐ˜์‘? ๊ดœ์ฐฎ์•„?

ํ‰์†Œ์—๋Š” ์ถ”์ฒœํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์„ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

@Wofiel As๋Š” ๋ฒ„์ „ 15 ๋ฐ˜์‘์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Wofiel ์ด ์†”๋ฃจ์…˜ console.log(e.target.value) 1๊ฐœ ์ˆ˜์‹ 
C:\fakepath\imagefilename.png
์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์€
e.target.files[0]

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋ฉด RaisedButton ์— containerElement ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ž…๋ ฅ ์š”์†Œ๋ฅผ ์ž์‹์œผ๋กœ ๊ฐ–๋Š” ๋ฐ ๋” ์ ํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ด๋ธ” ;-)

<RaisedButton
  containerElement='label' // <-- Just add me!
  label='My Label'>
    <input type="file" />
</RaisedButton>

@Thomas101 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ :)

@Thomas101 ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ

@Thomas101 ๋‹ต๋ณ€์„ ๋ณด์™„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ทธ์˜ ์˜ˆ์ œ์™€ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ ์–ธํ•  ๋•Œ RaisedButton์ด ๋‚ด๋ถ€์— ํŒŒ์ผ ์ž…๋ ฅ์œผ๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํŒŒ์ผ ์ž…๋ ฅ ์Šคํƒ€์ผ์„ display: none ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. :)

<RaisedButton
  containerElement='label' // <-- Just add me!
  label='My Label'>
    <input type="file" style={{ display: 'none' }} />
</RaisedButton>

@andreyluiz ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€:

<RaisedButton label='My Label'>
    <input type="file" />
</RaisedButton>

๋ฌธ์„œ ์‚ฌ์ดํŠธ ์˜ˆ์ œ์—์„œ ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

ํŒŒ์ผ ์ž…๋ ฅ์— ์ œ๊ณตํ•œ ์ฝ”๋“œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด์ƒ ํ•˜๋„ค. ์ œ ๊ฒฝ์šฐ์—๋Š” material-ui ๋ฒ„ํŠผ ๋‚ด๋ถ€์— ํŒŒ์ผ ์ž…๋ ฅ์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

@andreyluiz ์˜ˆ, ๋ฌธ์„œ ์‚ฌ์ดํŠธ ์˜ˆ์ œ(http://www.material-ui.com/#/components/raised-button)์—๋Š” <input> ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋ฒ„์ „์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์‹  ํฌ๋กฌ ๋ฒ„์ „.

๋‚˜๋Š” @andreyluiz ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ style={{display: 'none'}} ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

ํ— ๋ฐ•์‚ฌ

<RaisedButton
  containerElement="label"
  icon={<Icons.FileUpload />} // material-ui-icons
  labelColor="white"
  primary
  style={{ minWidth: 40, width: 40 }}>
  <input
    onChange={e => this.upload(e.target.files[0])}
    style={{ display: 'none' }}
    type="file"
  />
</RaisedButton>

์œ„์˜ ์†”๋ฃจ์…˜์ด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด v1 ๋ฒ ํƒ€ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋‹ค์Œ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

                        <Button dense
                                containerElement="label"
                                label="label">
                            <input
                                onChange={e => this.upload(e.target.files[0])}
                                style={{display: 'none'}}
                                type="file"
                            />
                        </Button>

์ฝ˜์†”์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Warning: React does not recognize the `containerElement` prop on a DOM element.
If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `containerelement` instead.
If you accidentally passed it from a parent component, remove it from the DOM element.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด์จŒ๋“  ๊ทธ๋Ÿฌํ•œ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? (๋น„ ํ•ดํ‚น ๋ฐฉ์‹์œผ๋กœ)

@AdityaAnand1 ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<Button
            raised
            component="label" <---- use component instead of containerElement
            color="primary"
            className={buttonClassname}
            disabled={this.state.loading}
            onClick={this.handleButtonClick}
          >
            {'Upload'}
            <FileUpload className={classes.rightIcon} />
            <input
              onChange={e => console.log(e.target.files[0])}
              style={{ display: 'none' }}
              type="file"
            />
</Button>
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰