React native mqtt - 按下按钮时发布

React native mqtt - publish when button is pressed

我的项目使用 sp-react-native-mqtt,我想在按下按钮时向 mqtt 主题发布消息。

Mqtt连接代码,其中returns一个承诺:

    MQTT.createClient({
  uri: 'mqtt://test.mosquitto.org:1883',
  clientId: 'your_client_id'
}).then(function(client) {

  client.on('closed', function() {
    console.log('mqtt.event.closed');
  });

  client.on('error', function(msg) {
    console.log('mqtt.event.error', msg);
  });

  client.on('message', function(msg) {
    console.log('mqtt.event.message', msg);
  });

  client.on('connect', function() {
    console.log('connected');
    client.subscribe('/data', 0);
    client.publish('/data', "test", 0, false);
  });

  client.connect();
}).catch(function(err){
  console.log(err);
});

编辑:

如果我将客户端保存在一个变量中,并且我使用该变量进行发布,我会收到此错误:

  let mqttClient = null;

MQTT.createClient({
        uri: 'mqtt://test.mosquitto.org:1883',
        clientId: 'your_client_id',
      })
        .then(function (client) {
          mqttClient = client;
    .... }

       <Button
              title="test"
              onPress={() => {
                mqttClient.publish('/data', 'message');
              }}
            />

我该如何处理? 或者,如果您对如何在本机反应中使用 mqtt 或 mqtt 的另一个包有任何其他建议。

谢谢!

毕竟,@hardillb 的回答帮助了我。

起初即使我将 客户端 保存在一个变量中它也没有发送消息,因为我在客户端连接之前就保存了它。

工作代码:

  let mqttClient = null;

  MQTT.createClient({
    uri: 'mqtt://test.mosquitto.org:1883',
    clientId: 'your_client_id',
  })
    .then(function (client) {
      client.on('closed', function () {
        console.log('mqtt.event.closed');
      });

      client.on('error', function (msg) {
        console.log('mqtt.event.error', msg);
      });

      client.on('message', function (msg) {
        console.log('mqtt.event.message', msg);
      });

      client.on('connect', function () {
        console.log('connected');
        client.subscribe('data', 0);
        mqttClient = client;
      });

      client.connect();
    })
    .catch(function (err) {
      console.log(err);
    });

       <Button
          title="test"
          onPress={() => {
            //   console.log(mqttClient);
            mqttClient.publish('data', 'This is the answer', 0, true);
          }}
        />

谢谢@hardillb!