Импорт функций JavaScript не работает должным образом

#javascript

#javascript

Вопрос:

Я имею в виду приведенный ниже код. https://github.com/jonasschmedtmann/complete-javascript-course/blob/master/9-forkify/final/src/js/views/searchView.js

Я создал функцию и попытался импортировать функцию в другой js-файл, но это не работает. Если я напишу «elements.searchInput.value;», это не сработает, а если я сделаю «console.log (elements.searchInput.value)», это сработает. Я делаю то же самое, что и файл ссылки, но просто задаюсь вопросом, почему мой код не работает.

 index.js

import "./../styles/style.scss";
import Search from './models/Search';
import * as searchView from './views/SearchView';
import { key, proxy } from './config';
import { elements } from './views/Base';

const state = {};

const controlSearch = async () => {
    const query = searchView.getInput(); // <- This doesn't work
    console.log(query) // Get nothing

    if(query) { // <- Can't get in to this part
        state.search = new Search(query);
        console.log("New Search", state);
    }
}

elements.searchForm.addEventListener('submit', e => {
    event.preventDefault();
    controlSearch();
});

  
 searchView.js

import { elements } from './base';

export const getInput = () => {
    elements.searchInput.value; // This code won't show up in controlSearch function

export const clearInput = () => {
    elements.searchInput.value = '';
};
  
 base.js

export const elements = {
    searchForm: document.querySelector('.search'),
    searchResult: document.querySelector('.movie_list'),
    searchInput: document.querySelector('.search__field')
}
  
 Search.js

import { key } from '../config';

export default class Search {
    constructor(query) {
        this.query = query;
    }

    async getResults() {
        try {
            const res = await axios(`http://`);
            this.result = res.data.results;
        }

        catch (error) {
            alert(error);
        }
    }

}
  

Комментарии:

1. Что такое ошибка? Также назовите файл

2. Когда вы говорите «не работает» и «не отображается», есть ли какие-либо ошибки в консоли разработчика? Или содержимое query просто пустое?

3. Извините за путаницу, да, запрос пуст. Это должно быть elements.searchInput.value . Также ошибка не отображается…

4. search__field два _ ? это верно?

5. » console.log(query) // Get nothing » как неопределенный? Попробуйте const query = await searchView.getInput();

Ответ №1:

Функции получения должны возвращать значение.

 const yourFunction = () => { return yourVariable };
  

Или с помощью функции arrow вы можете использовать:

 const yourFunction = () => yourVariable;
  

Комментарии:

1. Решением, которое я придумал, было возвращение значения, но когда мне понравился export const GetInput = () => ‘elements.searchInput.value’ , он не распознает значение searchInput, а просто принимает его как строку «elements.searchInput.value»

2. Конечно, вы должны возвращать свою переменную вместо моего текста или строки. Но вы должны что-то вернуть. const yourFunction = () => { return yourVariable; } или const yourFunction = () => yourVariable; … Это всего лишь пример, который я отредактирую.

Ответ №2:

это ваша проблема здесь

 export const getInput = () => {
    elements.searchInput.value; 
  

Вы ничего не возвращаете
, измените его на

 export const getInput = () => elements.searchInput.value; 
  

или

 export const getInput = () => {
    return elements.searchInput.value; 
}
  

Комментарии:

1. кроме того, открывая отправленную вами ссылку, я считаю, что это тоже было сделано

2. Спасибо, это сработало!! Я думал, что сделал то же самое, но, похоже, я сделал что-то не так. Также по какой-то причине мой возврат сначала не сработал… возможно, неправильный синтаксис. В любом случае, большое вам спасибо за вашу помощь!!