Есть одностраничное react приложение, одна из функций которого - отрисовка некоторых графов. Есть кнопка загрузки пользовательских данных о цвете узлов в текстовом виде.
<Button
style={{ margin: 6 }}
variant="contained"
color="primary"
component="label"
>
Upload colors
<input
onChange={(e) => {this.uploadColors(e)}}
style={{ display: 'none' }}
type="file"
/>
</Button>
И функция обработки, полностью не привожу, только часть связнную с чтением
uploadColors = (e) => {
let user_colors
if (window.FileReader) {
let file = e.target.files[0], reader = new FileReader();
reader.readAsText(file);
reader.onload = function(r) {
user_colors = reader.result
//дальше что-то делаем с user_colors
}
}
Если пользователь загруажет файл впервые, все нормально. Далее он меняет что-то в приложении, скажем, масштаб отрисовки графа, и хочет снова загрузить тот же файл. Проблема в том, что тот же файл повторно не загружается. Как я понимаю, дело в том, что не происходит onChange, если файл тот же самый. Была мысль вручную удалять информацию об открытом файле, но я почему-то не нашел, где хранится value,от которого зависит срабатывание onChange.
Добавьте вашему input-у id:
<input
onChange={(e) => {this.uploadColors(e)}}
style={{ display: 'none' }}
type="file"
id="input-field"
/>
Далее для очистки используйте:
document.getElementById("input-field").value = "";
Например так:
onChange={(e) => {
document.getElementById("input-field").value = "";
this.uploadColors(e)
}}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей