Простой сброс атома и проверка валидации не работают как задумано - PullRequest
1 голос
/ 23 апреля 2019

Я делаю приложение 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, он выдает ошибку, и случайные числа делают кнопку действительной и недействительной.

1 Ответ

0 голосов
/ 24 апреля 2019

Оказывается, что атомы запуска имеют числовые типы, а затем, как только пользователь взаимодействует с входными данными, они меняются на тип String / text, и, таким образом, оператор clojure (<= string string string) сравнивает их, как если бы они были строками а не цифры. Приведение значений к (int) в диапазоне? функция решила мою проблему. </p>

...