Dva: peringatan yang mengganggu: Peringatan: pengiriman: ns/ACTION_TYPE tidak boleh diawali dengan namespace ns

Dibuat pada 18 Jun 2017  ·  11Komentar  ·  Sumber: dvajs/dva

Apakah mungkin untuk mematikan peringatan "membantu" yang diterima saat menggunakan fungsi "pengiriman" dalam pendaftaran atau efek "menempatkan"?
Atau setidaknya menjadikannya opsional.

Saya menyimpan pembuat tindakan dan jenis tindakan saya dalam file khusus, yang saya yakini sebagai praktik terbaik umum untuk redux (lihat misalnya di sini )

Ini berarti saya selalu menggunakan pembuat tindakan saya dalam efek dva, registrasi dan komponen.

Contoh:
actionTypes.js:

export const TOKEN_RESTORED = 'auth/TOKEN_RESTORED';

tindakan.js:

export default {
    tokenRestored: payload => ({type: TOKEN_RESTORED, payload: payload.token})
};

model.js:

app.model({
    namespace: ...,
    state: { ... },
    effects: { ... },

    subscriptions: {
        setup({dispatch}) {
            let token = localStorage.token;
            if (token) {
                dispatch(actions.tokenRestored({token}));
            }
        }
    }
});

Saya percaya bahwa pengguna harus dapat menulis kode seperti ini, tanpa menerima lusinan jenis peringatan:

Warning: dispatch: auth/tokenRestored should not be prefixed with namespace auth

Gaya kode adalah cara preferensi pribadi, dan dva saat ini menghukum pengguna yang tidak secara langsung menggunakan string untuk jenis tindakan.

Komentar yang paling membantu

Saya agak terlambat ke pesta di sini, tetapi ini adalah peretasan yang saya gunakan untuk mengatasi kesalahan. Jelas bukan solusi yang baik tetapi setidaknya menahan output kesalahan.

```// my-model.js
console.error = pesan => {
if (message.indexOf("prefixNamespace") === -1) {
console.log(pesan);
}
};

Semua 11 komentar

Saya baru saja mengalami masalah yang sama.
Mengelola tindakan dengan tindakan redux itu mudah.
Namun, ini tidak dapat digunakan dalam model karena peringatan.

Saya telah membuat permintaan tarik jika itu membantu masalah ini mendapatkan perhatian.

1013

Merekomendasikan menggunakan https://www.npmjs.com/package/babel-plugin-dev-expression untuk menghapus invarian dan peringatan untuk produksi.

Bagaimana dengan lingkungan pengembangan?
Bagaimana jika saya tidak dapat menggunakan plugin Babel karena saya menggunakan aplikasi buat reaksi?

Mengapa saya harus mendapatkan peringatan karena menggunakan teknik umum?

Pada 19 Juli 2017 06:25, "chencheng (云谦)" [email protected] menulis:

Merekomendasikan menggunakan https://www.npmjs.com/package/babel-plugin-dev-expression
untuk menghapus invarian dan peringatan untuk produksi.


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung, lihat di GitHub
https://github.com/dvajs/dva/issues/988#issuecomment-316261873 , atau bisu
benang
https://github.com/notifications/unsubscribe-auth/ABJVKPRJMf0P0qVcTgOm-UH4q9RCNpg4ks5sPXcTgaJpZM4N9hlv
.

@orzarchi Saya percaya @sorrycc sangat sibuk dan fokus pada masalah terbuka hanya untuk dapat mempertahankan proyek ini. Jadi, Anda harus membuat masalah baru untuk menarik perhatiannya.

BTW, apakah Anda berhasil mengatasi peringatan ini?

Saya memiliki masalah yang berbeda. Model saya melakukan tindakan yang hanya digunakan oleh model lain:

// realtime.js
yield put({ type: 'message', payload: { message } });

dan model lain mendengarkan pesan dari waktu nyata:

// someModel.js
const message = yield take('realtime/message');

Karena model realtime tidak melakukan apa-apa dengan message itu sendiri, ia tidak memiliki efek message ditentukan. Karena itu yield put({ type: 'message', payload: { message } }) tidak diawali oleh algoritme internal dvajs dan realtime/message tidak pernah diaktifkan.
Dan jika saya awalan secara manual:

// realtime.js
yield put({ type: 'realtime/message', payload: { message } });

itu melempar peringatan tentang namespace ('... tidak boleh diawali dengan namespace ...')

Untuk mengatasi masalah saya telah menambahkan efek dummy ke dalam model:

// realtime.js
'effects': {
  // dvajs requires effect to be defined to auto-prefix it with namespace
  // if add prefix manually then dvajs throws annoying warnings
  // https://github.com/dvajs/dva/issues/988
  message: () => { },
}

Sekarang saya tidak memiliki peringatan dan model lain menerima tindakan realtime/message .

Saya tidak mengerti mengapa membuka masalah lagi akan mengubah pendapatnya.
Solusi Anda tampaknya baik-baik saja, namun upaya ekstra tidak sepadan ketika Anda memiliki ratusan tindakan.
Juga merupakan praktik umum untuk menggunakan konstanta untuk jenis tindakan (atau fungsi pembuat tindakan), dan karena itu saya selalu mengirim dengan awalan.
Saya belum menemukan solusi, jadi saya mempertimbangkan forking dva untuk proyek saya saat ini, dan kemudian tidak pernah menggunakannya lagi.

Saya agak terlambat ke pesta di sini, tetapi ini adalah peretasan yang saya gunakan untuk mengatasi kesalahan. Jelas bukan solusi yang baik tetapi setidaknya menahan output kesalahan.

```// my-model.js
console.error = pesan => {
if (message.indexOf("prefixNamespace") === -1) {
console.log(pesan);
}
};

Saya agak terlambat ke pesta di sini, tetapi ini adalah peretasan yang saya gunakan untuk mengatasi kesalahan. Jelas bukan solusi yang baik tetapi setidaknya menahan output kesalahan.

console.error = message => {
  if (message.indexOf("prefixNamespace") === -1) {
    console.log(message);
  }
};

Bisakah Anda mengklarifikasi kode Anda? di mana Anda meletakkan kode itu?

Anda bisa memasukkannya ke dalam src/app.tsx. Dan jika Anda ingin menyimpan console.error alih-alih mengonversi semua console.error ke console.log, Anda dapat mencoba kode ini

const errorLog = console.error;
  console.error = (...rest) => {
    if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
      errorLog.call(console, ...rest);
    }
  };

Anda bisa memasukkannya ke dalam src/app.tsx. Dan jika Anda ingin menyimpan console.error alih-alih mengonversi semua console.error ke console.log, Anda dapat mencoba kode ini

const errorLog = console.error;
  console.error = (...rest) => {
    if (rest[0] && rest[0].indexOf('[sagaEffects.put]') === -1) {
      errorLog.call(console, ...rest);
    }
  };

Terima kasih, dan saya menemukan bahwa saya dapat menempatkan di mana saja di aplikasi, :))

Apakah halaman ini membantu?
0 / 5 - 0 peringkat