사용자가 파일을 끌어서 파일 정보를 표시 할 수 있도록 react-dropzone 및 React-Redux라는 노드 패키지 모듈을 사용하고 있습니다.파일 항목이로드 된 후 dataTransfer에서 FileList 만 디스패치하는 방법
react-dropzone 구성 요소는 표준 event.dataTransfer.files의 FileList를 제공합니다.
문제는 내가 FileList를 Redux 저장소에 디스패치 할 때 파일 항목이 아직 FileList 배열에로드되지 않았기 때문에 파일 데이터를 전달할 때 단지 {"preview":"blob:file:///f30eafb8-8a77-4402-9111-379590b4a03f"}
이 발생한다는 것입니다.
File 항목을 콘솔에 기록하면 볼 때까지 데이터가로드되기 때문에 파일 항목이 잘 표시되지만로드 된 후에 파일 정보를 전달하는 방법을 알 수는 없습니다.
다음은 FileList 배열에서 File 항목 중 하나를 콘솔에 기록하는 경우의 예입니다.
{
lastModified: 1473709614000,
lastModifiedDate: Mon Sep 12 2016 12:46:54 GMT-0700 (PDT),
name: "test_image.jpg",
path: "/Users/mitchconquer/Desktop/test_image.jpg",
preview: "blob:file:///0fe69686-125d-464a-a0a8-a42e497d3808",
size: 41805,
type: "image/jpeg",
webkitRelativePath: ""
}
나는 문제가 File 객체가 완전히로드되지 단지이다 생각하지만, 데이터가 완전히로드되면 난 단지 액션을 발사 할 수있는 방법을 알아낼 수 없습니다. 누군가가 올바른 길을 가르쳐 줄 수 있을까요?
여기에 반응-DROPZONE을 사용하고 내 구성 요소의 :
// FileDrop.js
import React, { Component, PropTypes } from 'react';
import { Link } from 'react-router';
import styles from './Home.css';
import Dropzone from 'react-dropzone';
export default class FileDrop extends Component {
static propTypes = {
message: PropTypes.string.isRequired,
setFile: PropTypes.func.isRequired
};
onDrop(files, event) {
console.log({files});
this.props.setFile(files);
}
render() {
return (
<div>
<Dropzone onDropAccepted={this.onDrop.bind(this)} multiple={false} disablePreview={false}>
<div>{this.props.message}</div>
</Dropzone>
</div>
);
}
}
... 그리고 여기에 위의 onDrop
방법에 사용 년대 setFile
방법을 가지고 내 활동 파일입니다 :
// actions/files.js
export const SET_FILE = 'SET_FILE';
// ACTION CREATORS
function _setFile(file) {
return {
type: SET_FILE,
file
};
}
// ACTION CREATOR CREATORS
export function setFile(file) {
return _setFile(file[0]);
}
.. 여기에는 그 행동을 다루는 감속기가 있습니다 :
// reducers/files.js
import { SET_FILE } from '../actions/files';
export const initialState = [];
export default function files(state = initialState, action = {}) {
switch (action.type) {
case SET_FILE:
const newState = state.slice();
const file = action.file;
newState.push(file);
return newState;
default:
return state;
}
}
로다시를 사용한다면'_.toPlainObject (files [0])'할 수도 있습니다. –