Выражение JS не работает как часть строки в ReactJS?

Не могли бы вы чем-нибудь помочь?

Я пытаюсь сделать следующее…

import {chosenIpAddress} from './socketEvents.js';

const socket = socketClient(`http:// ${chosenIpAddress} :8081`);

… Но что бы я ни пытался, он просто игнорирует мое выражение и видит его как http: //: 8081. Я пробовал использовать знаки плюса, запятые, обратные кавычки, кавычки, кричать и угрожать, но безуспешно.

Я могу выйти из IP-адреса, поэтому я знаю, что он заполнен, но как часть строки он просто игнорируется, и это сводит меня с ума!

Заранее спасибо ххх

P.S ... Я видел несколько похожих вопросов, но они мне не помогают, отсюда и новый вопрос.

Обновление: по запросу, это мой экспорт ...

let chosenIpAddress = "";

function  chosenTank(tank) {
    socket.emit('chosen tank', tank);
    console.info('Tank', tank);
    chosenIpAddress = tank.IpAddress;
}

export {
    chosenIpAddress,
};

Какой у вас socketEvents.js?

Tico 02.04.2018 18:30

Это посредник для событий «emit» и «on» между устройствами.

Richard KeMiKaL GeNeRaL Denton 02.04.2018 18:33

Чтобы быть уверенным, вы это экспортируете, не так ли?

Tico 02.04.2018 18:36

Ха-ха, да. Я могу вывести его из системы здесь, но как часть строки, он просто игнорируется.

Richard KeMiKaL GeNeRaL Denton 02.04.2018 18:37

Это странно...

Tico 02.04.2018 18:38

Это действительно так, и на данный момент проект критически важен!

Richard KeMiKaL GeNeRaL Denton 02.04.2018 18:40

На всякий случай, если кто-то еще смотрит, вставьте фрагмент, в который вы экспортируете переменную.

Tico 02.04.2018 18:41

Спасибо, обновил свой вопрос.

Richard KeMiKaL GeNeRaL Denton 02.04.2018 18:48

Где называется chosenTank? Первоначально вы экспортируете пустую строку, вызов функции, вероятно, происходит в какой-то другой момент времени, поэтому вы можете ее зарегистрировать, но она интерполируется как "".

Phix 02.04.2018 18:52
chosenTank никогда не вызывается, поэтому вы экспортируете { chosenIpAddress: "" }
connexo 02.04.2018 18:54

Это называется, я не могу вставить весь проект, так как он очень большой и имеет хорошее разделение проблем, так что это будет очень длинный пост. По сути, пользователю предоставляется экран, на котором он может выбрать свое устройство из списка подключенных устройств, поступающих с сервера, и оттуда вызывается 'selectedTank' и заполняется IP-адрес, поэтому я могу его зарегистрировать. out (если они не выберут один, журнал будет пуст).

Richard KeMiKaL GeNeRaL Denton 02.04.2018 18:59

Я знал, что это как-то связано с экспортом :)

Tico 02.04.2018 19:03

Это не имеет отношения к экспорту, см. Мой ответ.

Richard KeMiKaL GeNeRaL Denton 05.04.2018 01:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
13
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно экспортировать функцию, которая при вызове возвращает IP-адрес.

Файл, импортирующий chosenIpAddress, имеет исходное значение (пустая строка), но он никогда не будет обновлен даже при вызове chosenTake. Строки Javascript копируются по значению, поэтому, если вы обновляете исходную переменную, любые другие ссылки на нее не будет обновляться.

Пример строк, скопированных по значению:

chosenIpAddress = "";
x = chosenIpAddress; // x is ""
chosenIpAddress = "localhost"; // chosenIpAddress is "localhost", x is still ""
// This same issues applies to imports/exports.

Так что сделайте что-то вроде этого в своем файле IP-адреса:

let chosenIpAddress = "";

function chosenTank(tank) {
    socket.emit('chosen tank', tank);
    console.info('Tank', tank);
    chosenIpAddress = tank.IpAddress;
}

function getChosenIpAddress() {
    // This can be "" if chosenTank is not called first
    return chosenIpAddress;
}

export {
    getChosenIpAddress,
};

Кроме того, как указано в комментариях, вам необходимо вызвать chosenTank, прежде чем вы получите доступ к chosenIpAddress, иначе вы будете каждый раз получать пустую строку.

Кроме того, вам также необходимо создать строку сокета как функцию, чтобы при вызове она получала самое актуальное значение от getChosenIpAddress:

import {getChosenIpAddress} from './socketEvents.js';

function getChosenSocket() {
    return socketClient(`http://${getChosenIpAddress()}:8081`);
}

Все тот же. Выходит из системы при выборе, но по-прежнему игнорируется как часть строки.

Richard KeMiKaL GeNeRaL Denton 02.04.2018 19:54

Вам также нужно построить строку как функцию

Cory Danielson 02.04.2018 22:44

Нет, см. Мой ответ.

Richard KeMiKaL GeNeRaL Denton 05.04.2018 01:15
Ответ принят как подходящий

Итак, для всех, кто сталкивается с этой проблемой, я решил ее. Полученный ответ вроде как доходит до цели, но не совсем, я пробовал это (и его вариации), но это / они не сработали.

В основном в моем случае IP-адрес устанавливался при запуске приложения, поэтому selectedIpAddress всегда будет пустой строкой, поскольку он был установлен до того, как произошли соединения, никаких изменений экспорта, отзыва или построения функции не было бы. работа.

Чтобы обойти это, я позволил установить начальное соединение с помощью socketClient 'placeholder', чтобы предотвратить сбой приложения ...

let socket = socketClient('http://:8081');

... а затем, когда все было готово, я позвонил, чтобы повторно заполнить IP-адрес, когда компонент монтируется из внешнего интерфейса ...

Вызывается из внешнего интерфейса, когда все готово ...

componentDidMount() {
    frontEndConnected();
}

При необходимости добавьте IP-адрес ...

function frontEndConnected() {
    socket = socketClient(`http://${chosenTankIpAddress}:8081`);
}

... который творит шарм.

Другие вопросы по теме