Повторная загрузка того же файла в форму

131
24 сентября 2019, 02:20

Есть одностраничное 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.

Answer 1

Добавьте вашему inputid:

<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)
}}
READ ALSO
jQuery плавные показ фотографии

jQuery плавные показ фотографии

Как мне сделать, чтобы плавно отображалась следующая фотография?(и предыдущая) при клике на next вызывается функция $nextclick, в общем по коду видно

155
Как приблизить только содержимое &lt;iframe&gt;

Как приблизить только содержимое <iframe>

Есть сайт с интерактивной картойСправа поиск и список магазинов(при нажатии на элемент списка, подсвечивается элемент карты), слева список...

137
как сделать второй ряд &lt;li&gt;

как сделать второй ряд <li>

нужно чтобы li в строку было не больше 4 штук, после превышение лимита, новый li вставлялся во второй рядрядов не больше двух, width = 300px

132
работа с базой данных в localstorageDB

работа с базой данных в localstorageDB

скачал библиотеку localstorageDB но к сожалению у ней нет русской документации, а та что на агнлийском для меня скудновата не могу понять вот тут...

161