 
			
				05.05.2024, 21:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				react.js  не работает рекурсивка
			 
			
		
		
		
		выводит пустой экран 
import React,{useState,useRef,useEffect} from 'react';
function Polzunok() {
    const  pstart= useRef(1);
    const  ppend= useRef(15000);
    const [pstartValue, setPstartValue] = useState(1);
    const [ppendValue, setPpendValue] = useState(15000);
    const [lastActive, setLastActive] = useState(0);
    function checkError( a, b, c){
        if(c==1){
            if(a>b){
                a=b-100;
            }else if(a<b){
                console.log("this a < b");
            }
        }else if(c==2){
            if(a>b){
                b=a+100;
            }else if(a<b){
                console.log("a < this b");
            }
        }else{
            console.log("else");
        }
    }
    useEffect(() => {
        pstart.current.addEventListener('change', e => {
            setLastActive(1);
            setPstartValue(e.target.value);
        })
        ppend.current.addEventListener('change', e => {
            setLastActive(2);
            setPpendValue(e.target.value);
        })
        lastActive.addEventListener('change',checkError( pstartValue, ppendValue,lastActive));
    }, []);
    return (
        <div className="container">
            <h5 className="polzName">Название</h5><br/>
            <div className="slider"></div>
            <div>
                <input type="range" ref={pstart} className="pp" min="0" max="16000"/>
                <input type="range" ref={ppend}  className="pp" min="0" max="16000"/>
            </div>
            <div><p>"start" {pstartValue} "end" {ppendValue}<br/>"lastActive":{lastActive}</p></div>
        </div>
    );
}
export default Polzunok;
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.05.2024, 11:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от riaron86
			
		
	 | 
 
	| 
		не работает рекурсивка
	 | 
 
	
 
 Где тут рекурсия?
 
	
 
	| 
		
			Сообщение от riaron86
			
		
	 | 
 
	
		
lastActive.addEventListener('change',checkError( pstartValue, ppendValue,lastActive));
	 | 
 
	
 
 Функция  checkError выполнится, вернет  
undefined
  и именно это запишется в обработчик.
 
	
 
	| 
		
			Сообщение от riaron86
			
		
	 | 
 
	| 
		выводит пустой экран
	 | 
 
	
 
 Смотри какие ошибки, предупреждения пишет сервер и клиент... 
Может до элемента  Polzunok даже дело не доходит.
 
P.S. 
И это не Node.JS...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.05.2024, 21:08
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 админ подскажи где по реакту писать? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.05.2024, 21:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		и еще здесь  
import React, {useState} from 'react';
import Slider from 'react-slider';
function Polzunok() {
    const  MIN= 1200;
    const  MAX= 13000;
    const [values, setValues] = useState([MIN,MAX]);
    return (
        <div className="container">
            <h5 className="polzName">Название</h5><br/>
            <div className="slider"></div>
            <div>
                <Slider className="slider" onCange={setValues} value={values} min={MIN} max={MAX}/>
            </div>
        </div>
    );
}
export default Polzunok;
ползунки не двигаются 
вот css
 
/*polz*/
.slider {
    position: relative;
    width: 100%;
    border-radius: 3px;
    height: 2px;
    background-color: darkgrey;
}
.slider .progress{
    left:25%;
    right:25%;
    background-color: #61b9cf;
    position: absolute;
}
div.track{
    background-color: #61b9cf;
    border: 1px solid #61b9cf;
    padding:2px;
    margin: 2px;
}
div.thumb{
    background-color: white;
    height: 10px;
    width: 10px;
    border:1px solid gold;
}
div.thumb:hover{
    cursor: pointer;
}
div.thumb:active{
    border:1px solid black;
    cursor: pointer;
}
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.05.2024, 23:41
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 riaron86, в 14й строке точно onCange, а не onChange? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.05.2024, 20:42
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		нашел пример на js обычном отсюда http://www.codingnepalweb.com/price-range-slider-html-css-javascript/[/url] 
перевожу его на react если не сложно подскажите какие ошибки
 
import React,{useState,useRef} from 'react';
function Polzunok() {
    const rangeMin=useRef();
    const rangeMax=useRef();
    const usualMin=useRef();
    const usualMax=useRef();
    const rangeq=useRef();
    const priceGap = 1000;
    const [minPriceI,setMinPriceI]=useState();
    const [maxPriceI,setMaxPriceI]=useState();
    const [minPriceR,setMinPriceR]=useState();
    const [maxPriceR,setMaxPriceR]=useState();
    usualMin.addEventListener("input", e =>{
         setMinPriceI(parseInt(usualMin.current.value));
         setMaxPriceI(parseInt(usualMax.current.value));
           if(( maxPriceI- minPriceI >= priceGap) && usualMax.current.value<= rangeMax.max){
                if(e.target.className === "input-min"){
                    rangeMin.value = minPriceI;
                    rangeq.style.left = ((minPriceI / rangeMin.max) * 100) + "%";
                }
            }
        });
    usualMax.addEventListener("input", e =>{
        setMinPriceI(parseInt(usualMin.current.value));
        setMaxPriceI(parseInt(usualMax.current.value));
           if((maxPriceI - minPriceI >= priceGap) && maxPriceI <= rangeMax.max){
                if(e.target.className === "input-max"){
                    rangeMax.value = maxPriceI ;
                    rangeq.style.right = 100 - (maxPriceI  / rangeMax.max) * 100 + "%";
                }
            }
        });
    rangeMin.addEventListener("input", e =>{
        setMinPriceR (parseInt(rangeMin.current.value));
        setMinPriceR(parseInt(rangeMax.current.value));
            if((maxPriceR - minPriceR) < priceGap){
                if(e.target.className === "range-min"){
                    rangeMin.value = minPriceR - priceGap
                }else{
                    rangeMax.value = minPriceR + priceGap;
                }
            }else{
                usualMin.value = 2500;
                usualMax.value = 7500;
                rangeq.style.left = ((2500 / rangeMin.max) * 100) + "%";
                rangeq.style.right = 100 - (rangeMax / rangeMax.max) * 100 + "%";
            }
        });
    rangeMax.addEventListener("input", e =>{
        setMinPriceR (parseInt(rangeMin.current.value));
        setMinPriceR(parseInt(rangeMax.current.value));
            if((maxPriceR - minPriceR) < priceGap){
                if(e.target.className === "range-max"){
                    rangeMax.value = minPriceR + priceGap;
                }
            }else{
                usualMin.value = 2500;
                usualMax.value = 7500;
                rangeq.style.left = ((2500 / rangeMin.max) * 100) + "%";
                rangeq.style.right = 100 - (rangeMax / rangeMax.max) * 100 + "%";
            }
        });
    return (
        <div className="dbody">
        <div className="wrapper">
            <header>
                <h2>Price Range</h2>
                <p>Use slider or enter min and max price</p>
            </header>
            <div className="price-input">
                <div className="field">
                    <span>Min</span>
                    <input type="number" ref={usualMin} className="input-min" value="2500"/>
                </div>
                <div className="separator">-</div>
                <div className="field">
                    <span>Max</span>
                    <input type="number" ref={usualMax} className="input-max" value="7500"/>
                </div>
            </div>
            <div className="slider">
                <div className="progress" ref={rangeq}></div>
            </div>
            <div className="range-input">
                <input type="range" className="range-min" ref={rangeMin}min="0" max="10000" value="2500" step="100"/>
                    <input type="range" className="range-max" ref={rangeMin} min="0" max="10000" value="7500" step="100"/>
            </div>
        </div>
        </div>
    );
}
export default Polzunok;
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.05.2024, 09:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		riaron86, у вас на каждый рендер компонента будут навешиваться новые слушатели на каждый из инпутов. 
Зачем вам ref'ы, если у input'ов есть onChange prop?
 
Хотите контролируемые input'ы -  https://react.dev/reference/react-do...state-variable 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				22.05.2024, 17:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 спасибо заработало 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось riaron86, 22.05.2024 в 17:17.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				30.05.2024, 07:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.11.2021 
					
					
					
						Сообщений: 108
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		есть еще вопрос насчет useContext 
есть объект как в дочернем элементе его перебрать, как в php foreach,
 
import React,{createContext} from 'react';
import Navbar from "./components/Navbar";
import LeftMenu from "./components/LeftMenu";
import {AuthContext} from './context';
function App() {
    const prop= {
        checkboxi:
    {
        named:'Android',
        mname:'Android'
    },
        polzunok:
    {
        name:"Цена",
        start1:2000,
        start2:7000,
        minr:0,
        maxr:10000
    }};
  return (
    <div className="App">
        <AuthContext.Provider value={prop}>
            <Navbar/>
            <LeftMenu/>
        </AuthContext.Provider>
    </div>
  );
}
export default App;
import React, {useContext} from 'react';
import {AuthContext} from "../../context/index.js";
function Checkbox() {
        const prop=useContext(AuthContext);
        return (
            <div>
                    <ul>
                    {prop.checkboxi.map(prop.checkboxi.named => (
                            <li>{prop.checkboxi.named}
                                ))}</li>
                    </ul>
            </div>
        );
}
export default Checkbox;
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				30.05.2024, 10:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от riaron86
			
		
	 | 
 
	
		есть объект как в дочернем элементе его перебрать, как в php foreach 
... 
prop.checkboxi.map(/* ... */)
 
	 | 
 
	
 
 Например так...
 
const prop= {
	checkboxi: {
		named:'Android',
		mname:'Android'
	},
	polzunok: {
		name:"Цена",
		start1:2000,
		start2:7000,
		minr:0,
		maxr:10000
	}
};
Object.entries(prop.checkboxi).forEach(([k, v]) => console.log(k, v))
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |