ডিবাগ করার সময়, ব্রাউজার কনসোল থেকে আমার কি রেডাক্স স্টোরটিতে অ্যাক্সেস থাকতে পারে?


91

আমার ইউনিট পরীক্ষা আছে reducers। তবে, আমি যখন ব্রাউজারে ডিবাগ করছি, আমি আমার ক্রিয়াগুলি সঠিকভাবে ডেকে আনা হয়েছে কিনা এবং সেই অনুযায়ী রাষ্ট্রটি সংশোধন করা হয়েছে কিনা তা আমি খতিয়ে দেখতে চাই।

আমি এরকম কিছু খুঁজছি:

window._redux.store

... ব্রাউজারে তাই আমি কনসোলে টাইপ করতে পারি এবং কীভাবে চলছে তা যাচাই করতে পারি।

আমি কীভাবে এটি অর্জন করতে পারি?


4
একটি সাইড নোট হিসাবে, আপনি ব্যবহার করছেন বিবেচনা করতে পারেন Redux DevTools সহ আপনার কর্মের এবং তার ফলে রাজ্যের ঠাহর করতে। LogMonitor
মিশেল টিলি

4
সুরক্ষা সম্পর্কে কথা বলা, প্রোডাকশন বিল্ড মোডে, ব্রাউজার কনসোল থেকে পঠন স্টোর কি সম্ভব?
জেরিচার্ডস্

উত্তর:


153

কোনও কোডের পরিবর্তন ছাড়াই কোনও ওয়েবসাইটের রিডুএক্স স্টোরটি কীভাবে দেখুন

নভেম্বর 2019 আপডেট করুন

আমার আসল উত্তরের পর থেকে প্রতিক্রিয়ার ডেভলগুলি পরিবর্তন হয়েছে। componentsক্রোমের ডেভোলগুলিতে থাকা নতুন ট্যাবে এখনও ডেটা রয়েছে তবে আপনাকে আরও কিছুটা অনুসন্ধান করতে হতে পারে।

  1. ক্রোম ডিভটুলগুলি খুলুন
  2. Devtool এর Componentsট্যাব প্রতিক্রিয়া নির্বাচন করুন
  3. শীর্ষস্থানীয় নোডে ক্লিক করুন এবং storeপ্রদর্শিত হতে ডান হাতের কলামে দেখুন
  4. আপনি যতক্ষণ না পান গাছের নীচে 3 ধাপ পুনরাবৃত্তি করুন store(আমার জন্য এটি চতুর্থ স্তর ছিল)
  5. এখন আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন $r.store.getState()

উদাহরণ স্ক্রিনশট

আসল উত্তর

আপনি ব্যবহার করতে পারেন চলমান ডেভেলপার টুলস প্রতিক্রিয়া যদি আপনার $r.store.getState();সঙ্গে আপনার কোডবেস কোন পরিবর্তন

দ্রষ্টব্য: এই কাজটি করার জন্য আপনাকে প্রথমে আপনার বিকাশকারী সরঞ্জাম উইন্ডোতে রিঅ্যাক্ট ডিভটোলটি খুলতে হবে, অন্যথায় আপনি একটি $r is not definedত্রুটি পাবেন

  1. বিকাশকারী সরঞ্জাম খুলুন
  2. প্রতিক্রিয়া ট্যাবে ক্লিক করুন
  3. সরবরাহকারী নোড (বা শীর্ষস্থানীয় নোড) নির্বাচন করা হয়েছে তা নিশ্চিত করুন
  4. তারপরে টাইপ করুন $r.store.getState();বা $r.store.dispatch({type:"MY_ACTION"})আপনার কনসোলে টাইপ করুন

4
দ্রষ্টব্য: এটি কাজ করার জন্য আপনাকে stateআপনার মূল উপাদানটিতে সম্পত্তি হিসাবে সঞ্চয় করতে হবে । আপনি যদি দিকনির্দেশগুলি অনুসরণ করেন এবং <Provider>শীর্ষ-স্তরের উপাদান হিসাবে থাকে তবে এটি দুর্দান্ত কাজ করবে। এদিক ওদিক ঘুরে কিছুটা পেয়েছি!
এডান ফিল্ডম্যান

4
ব্যবহার করুন$r.state.store.getState()
ব্যবহারকারী 1032752

4
দেখে মনে হচ্ছে দেব সরঞ্জামগুলির বিভাগে $rবর্তমানে নির্বাচিত উপাদানটিকে বোঝায় Components। আমি পুরো storeমাধ্যমে অ্যাক্সেস করতে সক্ষম বলে মনে হচ্ছে না $r, কারণ আমি সর্বত্র হুক ব্যবহার করছি, তবে আমার স্টোরের অংশটি দেখতে পাচ্ছি যা আমার উপাদানটি দেখতে পারে যা প্রায় ভাল, আবার কখনও কখনও আরও পয়েন্ট!
দিমা তিস্নেক

4
$r.hooks[0].subHooks[0].subHooks[0].value.store.getState()সেই উপাদানগুলির জন্য কাজ করে যা useSelector... ওব।,
ওয়াইএমএমভি

4
আমার ব্যবহার করতে হয়েছিল$r.props.store
ক্রিস ডোভার

63

let store = createStore(yourApp); window.store = store;

এখন আপনি উইন্ডোজ স্টোর থেকে স্টোরটি অ্যাক্সেস করতে পারেন কনসোলে এটির মতো:

window.store.dispatch({type:"MY_ACTION"})


6
এবং এই রাজ্যেও অ্যাক্সেস করতে পারে:window.store.getState()
লিরান ব্রিমার

13

আপনি রেডাক্স বইতে বর্ণিত লগিং মিডলওয়্যার ব্যবহার করতে পারেন :

/**
 * Logs all actions and states after they are dispatched.
 */
const logger = store => next => action => {
  console.group(action.type)
  console.info('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  console.groupEnd(action.type)
  return result
}

let createStoreWithMiddleware = applyMiddleware(logger)(createStore)

let yourApp = combineReducers(reducers)
let store = createStoreWithMiddleware(yourApp)

বিকল্পভাবে, আপনি লগিংটি কেবলমাত্র একটি গ্লোবাল অ্যারেতে যুক্ত করতে পারেন (আপনার window._redux) এবং যখন আপনাকে কোনও নির্দিষ্ট রাজ্যে তথ্য প্রয়োজন হয় তখন আপনি অ্যারেটিতে দেখতে পারেন।



আপনি যদি এই জাতীয় হ্রাসকারীগুলি আমদানি করে থাকেন: './reducrs/' থেকে আমদানি হ্রাসকারীগুলি তবে আপনি কেবল './reducers/' ফাইল হিসাবে 'স্টোর = ক্রম-স্টোরউইথমিডওয়্যার (হ্রাসকারী) হিসাবে ব্যবহার করতে পারেন এতে সাধারণত একত্রিতকারক থাকবে।
ব্রুস

7

প্রস্তাবিত সমাধানটি আমার পক্ষে কাজ করে না।

সঠিক আদেশটি হ'ল:

$r.props.store.getState()

এটি এই উত্তরের একটি মন্তব্য হওয়া উচিত
gdbdable

6

আপনি যদি নেক্সট জেএস ব্যবহার করছেন তবে আপনি স্টোরটিতে অ্যাক্সেস করতে পারবেন: window.__NEXT_REDUX_STORE__.getState()

আপনি ক্রিয়া প্রেরণ করতে পারেন, কেবলমাত্র আপনার বিকল্পগুলি দেখুনwindow.__NEXT_REDUX_STORE__


1

আপনি যদি ডিবাগিংয়ের জন্য স্টোরের অবস্থা দেখতে চান তবে আপনি এটি করতে পারেন:

#import global from 'window-or-global'
const store = createStore(reducer)
const onStateChange = (function (global) {
  global._state = this.getState()
}.bind(store, global))
store.subscribe(onStateChange)
onStateChange()
console.info('Application state is available via global _state object.', '_state=', global._state)

1

অন্য একটি উত্তর উইন্ডোতে স্টোর যুক্ত করার পরামর্শ দেয় তবে আপনি যদি কেবল কোনও বস্তু হিসাবে স্টোরটি অ্যাক্সেস করতে চান তবে আপনি উইন্ডোতে একটি গেটরকে সংজ্ঞায়িত করতে পারেন।

আপনি যেখানে আপনার স্টোরটি কনফিগার করেছেন সেখানে এই কোডটি যুক্ত করা দরকার - আমার অ্যাপ্লিকেশনটিতে, এটি একই ফাইলটি যেখানে <Provider store={store} />ডাকা হয়।

এখন আপনি reduxStoreকোনও বস্তু পেতে - এবং copy(reduxStore)এটি ক্লিপবোর্ডে অনুলিপি করতে কনসোলে টাইপ করতে পারেন ।

  Object.defineProperty(window, 'reduxStore', {
    get() {
      return store.getState();
    },
  });

আপনি একটি এই মোড়ানো পারেন if (process.env.NODE_ENV === 'development')উৎপাদনে এটিকে নিষ্ক্রিয় করতে।


-1

বিক্রিয়াকারী সরঞ্জামগুলির সাথে প্রতিক্রিয়া:

const store = [...__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent.internalInstancesById.values()].find(e=>e.elementType.name==="Provider").pendingProps.store

4
Uncaught TypeError: Cannot read property 'values' of undefinedত্রুটি দেয়
gdbdable

-2

প্রথমত, আপনাকে windowঅবজেক্টে স্টোরটি সংজ্ঞায়িত করতে হবে (আপনি এটি configureStoreফাইলটিতে রাখতে পারেন):

window.store = store;

তারপরে আপনার কেবল নিম্নলিখিত কনসোলে লিখতে হবে:

window.store.getState();

আশা করি এটি সাহায্য করে।


স্টোর ডিফল্টরূপে কনসোলে অপরিজ্ঞাত। কিভাবে এটি সেখানে পাবেন?
জেন এস

স্টোরটি ব্যবহারের আগে উইন্ডো অবজেক্টে প্রথমে সংজ্ঞায়িত করা দরকার।
রাফায়েল রোজন

@ রাফায়েলরোজন হ্যাঁ, আপনি ঠিক বলেছেন, আমি এটি প্রমাণ করার জন্য আমার উত্তর সম্পাদনা করেছি।
আলবার্তো পেরেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.