Я делаю приложение React / ClojureScript с вводом для минимального и максимального значения, за которым следует ввод, который будет проверяться, если он находится в диапазоне от минимального до максимального значения. Затем, если он находится в диапазоне, он активирует кнопку Valid , а если не отключает ее. Он работает с начальными значениями атомов для минимального и максимального диапазона, но когда я изменяю их через входы на веб-странице, они ошибочно, как сумасшедшие, и я не могу понять, почему, потому что, где бы я ни смотрел на значения min и max, кажется, моя кнопка In-Range и Valid должны работать.
(def min-range (reagent/atom 0))
(def max-range (reagent/atom 100))
(defn min-get []
[:div
"The atom " [:code "min-range"] " has value: "
@min-range ". "
[:input {:type "number"
:on-change #(reset! min-range (-> % .-target .-value))}]])
(defn max-get []
[:div
"The atom " [:code "max-range"] " has value: "
@max-range ". "
[:input {:type "number"
:on-change #(reset! max-range (-> % .-target .-value))}]])
(defn atom-input [value]
[:input {:type "number"
:value @value
:on-change #(reset! value (-> % .-target .-value))}])
(defn in-range? [number]
(if (and (>= number @min-range) (<= number @max-range)) false true))
(defn range-validation [val]
[:div
"Number must be between " @min-range
" : and " @max-range " : "
[:input {:type "button" :value "Valid" :disabled (in-range? val)}]])
(defn check-me []
(let [val (reagent/atom 0)]
(fn []
[:div
"Value to be checked "
[:p "the value is " @val]
[:p [atom-input val]]
[:on-change [:p @min-range " + " @max-range]]
[:on-change [range-validation @val]]])))
Так что, если я рендерим min-get
, max-get
и check-me
, у меня должно получиться 3 входа, а некоторые при изменении min-get
и max-get
, тогда кнопка Valid в range-validation
должен переключаться между disabled
и enabled
в зависимости от переданного значения.
изменить 1:
Когда я изменяю значения min-range и max-range через входы, кнопка Valid не работает должным образом, например, при первоначальном запуске, значения равны 0min 100 max. Таким образом, все числа от 0 до 100 сохраняют действительную кнопку активной, но при -1 и 101 они отключены. Однако, если я изменю максимальный диапазон на 75, он выдает ошибку, и случайные числа делают кнопку действительной и недействительной.