2017-02-20 115 views
0

內輸入的onChange的價值這是我的組件:作出反應 - 如何打印組件

export default function ImageUpload({ onSuccess, children}) { 

    let value = ''; 
    const onUpload = async (element) => { 
    element = element.target.files; 
    let response; 
    // Call endpoint to upload the file 
    value = element[0].name; 
    return onSuccess(response.url); 
    }; 

    return <div> 
    <div > 
     {children} 
     <input type="file" id="upload" onChange={onUpload.bind(this)} /> 
    </div> 
    <span>{value}</span> 
    </div>; 
} 

我想跨度內打印從用戶選擇的文件的名稱。 我對狀態使用了redux,但這些信息不屬於該狀態。 這種方式不起作用,有人可以解釋我爲什麼嗎?

UPDATE 由於看起來像有沒有辦法實現這個無狀態我的問題是關於最佳方法:使用 也Redux的,如果我不需要這個值的組件之外或使用的內部狀態組件,但結束了Redux和這個狀態?

+1

你爲什麼說這不屬於進入狀態?該組件必須重新渲染以顯示文件的名稱。您至少可以將文件的名稱放在該狀態中。 –

+0

因爲是一種僅在組件內部有用的信息,並且從不在外部使用。 – Tres

回答

2

我能想到的改變方式,轉變您的組件類類型的組件,這樣的事情:

export default class ImageUpload extends Component { 
    constructor() { 
    this.state = { 
     value: '' 
    } 
    this.onUpload = this.onUpload.bind(this) 
    } 

    onUpload() { 
    let value = ''; 
    const onUpload = async (element) => { 
     element = element.target.files; 
     let response; 
     // Call endpoint to upload the file 
     value = element[0].name; 
     this.props.onSuccess(response.url); 
     this.setState({ value: value }) 
    }; 
    } 

    render() { 
    return <div> 
     <div > 
     {children} 
     <input type="file" id="upload" onChange={this.onUpload} /> 
     </div> 
     <span>{this.state.value}</span> 
    </div>; 
    } 

} 
+0

onUpload綁定在渲染中不必要,如果你在構造函數中綁定它。 – Mateusz

+0

謝謝,剛剛編輯了這個 – Robsonsjre

+0

所以沒有辦法實現這個沒有使用組件的內部狀態 – Tres