2016-01-31 4 views
2

Я пытаюсь загрузить изображение динамически на основе реквизита в реагирующем компоненте.Как загрузить изображения асинхронно с webpack

До сих пор это то, что я придумал:

MyComponent.jsx(использует ES7 property initializers syntax)

//... 

const getIcon = (iconName) => { 
    require.ensure([], require => { 
    cb =() => require(`../../images/icons/${iconName}`) 
    }) 
} 

class MyComponent extends Component { 
    state = { 
    categoryIcon: getIcon.bind(this, this.props.icon) 
    }; 

    render() { 
    let iconStyle = {backgroundImage: `url('${this.state.categoryIcon}')`} 

    return(
     <div className={styles.categoryIcon} 
      style={iconStyle} 
     ></div> 
    ) 
    } 
} 

Исполнительное производит эту ошибку:

GET http://localhost:3000/function%20()%20%7B%20[native%20code]%20%7D 404 (Not Found)


Итак, у меня вопрос состоит из нескольких частей.

  1. Загрузка изображений асинхронно возможно с помощью require.ensure() с WebPack?
    • Если да, то как?
    • Если нет ...
  2. Могу ли я загружать изображения асинхронно с WebPack?
    • Если да, то как?
  3. На основании моего примера есть что-нибудь еще, что я должен рассмотреть?
+0

Кажется, что функция обратного вызова передается вместо выполнения. Я попытался добавить оператор возврата 'возврата Cb()' , а также оберточную функцию обратного вызова в iife 'центибар = (() => требуется (' ../../ изображения/значки/$ {} IconName .svg'))() ' оба производят ту же ошибку –

+0

я не определен, если я это сделать: ' componentWillMount = (this.setState ({categoryIcon: this.getIcon (this.props.icon)})) getIcon = (iconName) => { require.ensure ([], require => { require ('../../ images/icons/$ {iconName} .svg') }) }; ' –

ответ

1

Я решил эту проблему с помощью следующего кода:

(iconName) => { 
    require.ensure([], require => { 
    require(`../../images/icons/${iconName}.svg`) 
    }) 
} 

class MyComponent extends Component { 
    state = { 
    categoryIcon: require(`../../images/icons/${this.props.icon}.svg`) 
    }; 

Чтение WebPack документы на code splitting более тщательно помогла.

+0

Я тестировал это решение с помощью встроенных изображений, используя url-loader, и он также работает. –

+0

хорошо для вас, чтобы решить свою проблему. –

+0

Спасибо @U r s u s –

Смежные вопросы