Vladislav342 3 vuotta sitten
vanhempi
commit
aaaf0109c9
1 muutettua tiedostoa jossa 115 lisäystä ja 0 poistoa
  1. 115 0
      HW_11/redux.html

+ 115 - 0
HW_11/redux.html

@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8">
+	<title>Redux</title>
+</head>
+<body>
+
+	<!-- <input type="text" id="tovar"> -->
+	<select id='tovar'>
+		<option value="пиво">пиво</option>
+		<option value="чипсы">чипсы</option>
+		<option value="сиги">сиги</option>
+	</select>
+	<input type="number" id="skok">
+	<button id="btn">Купить</button>
+
+	<script>
+		function reducer(state, {type, ШО, СКОКА}){
+    	if (!state){ 
+       		return {
+            	пиво: 100,
+            	чипсы: 100,
+            	сиги: 100
+        	}
+    	}
+    	if (type === 'КУПИТЬ'){ 
+        	return {
+            	...state, 
+            	[ШО]: state[ШО] - СКОКА 
+        	}
+    	}
+    	return state;
+		}
+
+
+		function createStore(reducer){
+    		let state       = reducer(undefined, {}) 
+    		let cbs         = []                     
+    
+    		const getState  = () => state  
+    		const subscribe = cb => (cbs.push(cb),  
+                             () => cbs = cbs.filter(c => c !== cb)); 
+    		const dispatch  = action => { 
+        		const newState = reducer(state, action) 
+        			if (newState !== state){ 
+            			state = newState  
+            			for (let cb of cbs)  cb() 
+        			}
+    		}
+    
+    		return {
+        		getState, 	
+        		dispatch,
+        		subscribe 
+    		}
+		}
+		
+		let store=createStore(reducer);
+		btn.onclick=function(){
+			for(let [key] of Object.entries(store.getState())){
+				if(tovar.value===key){
+					store.dispatch({type: 'КУПИТЬ', ШО: tovar.value, СКОКА: skok.value});
+					console.log(store.getState())
+				}
+			}
+		}
+
+		let table=document.createElement('table');
+		for(let [key,value] of Object.entries(store.getState())){
+			let tr=document.createElement('tr');
+			let td=document.createElement('td');
+			td.innerText=key+':'+value;
+			tr.append(td);
+			table.append(tr);
+		}
+		document.body.append(table);
+
+		
+
+		const unsubscribe=store.subscribe(()=>{
+			while (table.hasChildNodes()) {
+    			table.removeChild(table.firstChild);
+			}
+			for(let [key,value] of Object.entries(store.getState())){
+			let tr=document.createElement('tr');
+			let td=document.createElement('td');
+			td.innerText=key+':'+value;
+			tr.append(td);
+			table.append(tr);
+		}
+		document.body.append(table);
+		})
+
+		/*zakup.onclick=function(){
+			for(let [key] of Object.entries(store.getState())){
+				if(tovar.value===key){
+					store.dispatch({type: 'КУПИТЬ', ШО: tovar.value, СКОКА: skok.value});
+					console.log(store.getState())
+				}
+			}
+		}*/
+
+
+		
+		console.log(store.getState());
+		
+
+
+		
+
+
+	</script>
+</body>
+</html>