مدیاویکی:Experimental-react-demo.js

از ویکی‌پدیا، دانشنامهٔ آزاد

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.

mw.loader.using('ext.gadget.experimental-reactjs').then(function () {
	// Adopted from https://reactjs.org/docs/hooks-reference.html
	var useState = React.useState, useEffect = React.useEffect,
		createElement = React.createElement, useReducer = React.useReducer;
	
	var initialState = { count: 1 };
	
	function reducer(state, action) {
		switch (action.type) {
		case 'reset':
			return initialState;
		case 'increment':
			return {count: state.count + 1};
		case 'decrement':
			return {count: state.count - 1};
		default:
			// A reducer must always return a valid state.
			// Alternatively you can throw an error if an invalid action is dispatched.
			return state;
		}
	}
	
	function Counter() {
	    var stateDispatchPair = useReducer(reducer, initialState);

	    return createElement('div', {},
			createElement('br'),
			'Count: ' + stateDispatchPair[0].count,
			createElement('button', { onClick: function () { stateDispatchPair[1]({ type: 'reset' }); } }, 'Reset'),
			createElement('button', { onClick: function () { stateDispatchPair[1]({ type: 'increment' }); } }, '+'),
			createElement('button', { onClick: function () { stateDispatchPair[1]({ type: 'decrement' }); } }, '-')
		);
	}
	
	ReactDOM.render(createElement(Counter, initialState), document.getElementById('mw-content-text'));
});